2012-08-22 30 views
0

每當我試圖用我的Rails應用程序引發ArgumentError(缺少主機鏈接到請提供:主機參數,設置default_url_options [:主機] Zencoder Ruby on Rails的

以下錯誤是顯示上傳的視頻:

ArgumentError (Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true): 
    app/uploaders/media_uploader.rb:64:in `zencode' 
    app/controllers/profile/videos_controller.rb:63:in `create' 

我使用Zencoder和Carrierwave的方式

這裏是我的media_uploader.rb

# encoding: utf-8 

class MediaUploader < CarrierWave::Uploader::Base 
    include Rails.application.routes.url_helpers 
    Rails.application.routes.default_url_options = ActionMailer::Base.default_url_options 

    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    # include CarrierWave::MiniMagick 

    # Choose what kind of storage to use for this uploader: 
    #storage :file 
    after :store, :zencode 
    storage :fog 


    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 


    def cache_dir 
     "#{Rails.root}/tmp/uploads" 
    end 

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    # process :scale => [200, 300] 
    # 
    # def scale(width, height) 
    # # do something 
    # end 

    # Create different versions of your uploaded files: 
    # version :thumb do 
    # process :scale => [50, 50] 
    # end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(mp4 flv ogv avi) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    def filename 
    #"video.mp4" if original_filename 
     "video.mp4" 
    end 

    private 
    def zencode(args) 
     zencoder_response = Zencoder::Job.create({:input => "s3://peekbox.s3.amazonaws.com/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}/video.mp4", 
                          :outputs => [{:base_url => "s3://peekbox.s3.amazonaws.com/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{@model.id}", 
                                 :filename => "video.mp4", 
                                 :label => "web", 
                                 :notifications => [zencoder_callback_url(:protocol => "http", :host => ENV['URL'], :port => ENV['PORT'])], 
                                 :video_codec => "h264", 
                                 :audio_codec => "aac", 
                                 :quality => 3, 
                                 :width => 854, 
                                 :height => 480, 
                                 :format => "mp4", 
                                 :aspect_mode => "preserve", 
                                 :public => 1, 
                                  :thumbnails => {:base_url => "s3://peekbox.s3.amazonaws.com/uploads/#{model.class.to_s.underscore}/thumb/#{mounted_as}/#{@model.id}", 
                                  :width => 200, 
                                  :height => 114, 
                                  :aspect_mode => "crop", 
                                  :number => 10, 
                                  :filename => "{{number}}_{{width}}x{{height}}-thumbnail"}}] 
               }) 



     zencoder_response.body["outputs"].each do |output| 
     if output["label"] == "web" 
     @model.zencoder_output_id = output["id"] 
     @model.processed = false 
     @model.save(:validate => false) 
     end 
    end 
    end 
end 

順便說一下,我不知道這是關於從Heroku遷移到AWS Ec2的東西嗎? 請幫忙。

編輯:

每當我試圖

:notifications => [zencoder_callback_url(:protocol => "http", :host => ENV['URL'], :port => ENV['PORT'])], 

設置此行成

:notifications => [zencoder_callback_url(:protocol => "http", :host => 'peekbox.tv', :port => ENV['PORT'])], 

它跟不同的錯誤W/C是

NoMethodError (undefined method `each' for nil:NilClass): 
     app/uploaders/media_uploader.rb:83:in `zencode' 
     app/controllers/profile/videos_controller.rb:63:in `create' 
+0

請幫我用這個 – xirukitepe

回答

1

你應該添加以下內容選項config/production.rb

config.action_mailer.default_url_options = { host: 'peekbox.tv' } 
相關問題