我遇到此問題carrierwave+fog+s3
與Amazon cloud front
。用下面的設置,我可以將文件上傳到S3,但上傳後,S3對象的網址從我的Rails應用程序獲得不具有assets_host
基於網址,即我expeting的URL是這個樣子的格式https://mycloudfrontname.cloudfront.net/uploads/myfile.mp3
Carrierwave + 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
您是否嘗試過應用配置更新? –
你找到答案了嗎? – lulalala
我有這個相同的問題。我的配置與您的配置大致相同。出於某種原因,在我的開發環境中,我得到的URL類似於''http:// assets/mycloudfrontname.cloudfront.net/uploads/myfile.mp3'''和它的製作,它們是'''s3'''網址。順便說一句,如果你有'''#asset_host''',你就不需要''#fog_directory'''。 FWIW我也嘗試過'''#fog_public = true''',無濟於事。我今天花了大約5個小時的時間在網上進行研究,仔細閱讀github並逐步瀏覽載波代碼。我無法做出任何的頭或尾。 –