2012-11-23 25 views
4

我遇到此問題carrierwave+fog+s3與Amazon cloud front。用下面的設置,我可以將文件上傳到S3,但上傳後,S3對象的網址從我的Rails應用程序獲得不具有assets_host基於網址,即我expeting的URL是這個樣子的格式https://mycloudfrontname.cloudfront.net/uploads/myfile.mp3Carrierwave + fog + s3不適用於Cloud Front URLs

但他們都以這種格式出現https://mybucketname.s3.amazonaws.com/uploads/myfile.mp3

這裏有什麼問題?

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS', 
    :aws_access_key_id  => 'XXXX', 
    :aws_secret_access_key => 'XXXX', 
    :region     => 'us-east-1' 
    } 
    config.fog_directory = 'mybucketname' 
    config.asset_host  = 'https://mycloudfrontname.cloudfront.net' 
    config.fog_public  = false 
    config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} 
end 

UPDATE:

我發現從Carrierwave的/lib/carrierwave/storage/fog.rb這個代碼位 - 所以,如果我們在上面的代碼片段設置asset_host因爲這要工作的權利?還是還有其他配置我必須做?

def public_url 
      if host = @uploader.asset_host 
      if host.respond_to? :call 
       "#{host.call(self)}/#{path}" 
      else 
       "#{host}/#{path}" 
      end 
      else 
      # AWS/Google optimized for speed over correctness 
      case @uploader.fog_credentials[:provider] 
      when 'AWS' 
       # if directory is a valid subdomain, use that style for access 
       if @uploader.fog_directory.to_s =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\d{1,3}){3}$))(?:[a-z0-9\.]|(?![\-])|\-(?![\.])){1,61}[a-z0-9]$/ 
       "https://#{@uploader.fog_directory}.s3.amazonaws.com/#{path}" 
       else 
       # directory is not a valid subdomain, so use path style for access 
       "https://s3.amazonaws.com/#{@uploader.fog_directory}/#{path}" 
       end 
      when 'Google' 
       "https://commondatastorage.googleapis.com/#{@uploader.fog_directory}/#{path}" 
      else 
       # avoid a get by just using local reference 
       directory.files.new(:key => path).public_url 
      end 
      end 
     end 
+0

您是否嘗試過應用配置更新? –

+0

你找到答案了嗎? – lulalala

+0

我有這個相同的問題。我的配置與您的配置大致相同。出於某種原因,在我的開發環境中,我得到的URL類似於''http:// assets/mycloudfrontname.cloudfront.net/uploads/myfile.mp3'''和它的製作,它們是'''s3'''網址。順便說一句,如果你有'''#asset_host''',你就不需要''#fog_directory'''。 FWIW我也嘗試過'''#fog_public = true''',無濟於事。我今天花了大約5個小時的時間在網上進行研究,仔細閱讀github並逐步瀏覽載波代碼。我無法做出任何的頭或尾。 –

回答

0

在您的環境文件中,您需要設置資產主機。只需將下面的行添加到您的config/environments/production.rb文件中,您應該沒問題。也可能要確保你使用的是最新版本的載波和霧寶石。

-- config/environments/production.rb 

Myapp::Application.configure do 

    # Use Content Delivery Network for assets 
    config.action_controller.asset_host = 'https://mycloudfrontname.cloudfront.net' 

end 
0

請勿使用asset_host。 asset_host設置用於由rails資產助手提供的文件。 CarrierWave文件以不同的方式處理。你正在尋找的配置,那麼config.fog_host

config.fog_host = 'https://mycloudfrontname.cloudfront.net' 
+4

''''fog_host'''被重命名爲'''asset_host'''。 https://github.com/carrierwaveuploader/carrierwave/blob/d7dba56ffe18a5ac5e49419ee9a9bf447c229c15/History.txt#L17 –

0

變化config.fog_publictrue並添加config.asset_host = 'YOUR_CND_ADDRESS'。當fog_public爲假時asset_host不起作用

相關問題