我正在试图弄清楚如何设置CarrierWave与Fog和Amazon S3一起使用。在S3上,我有一个桶,“bucket1”,文件夹“images”。上传工作正常。例如,图片可能会上传到https://s3.amazonaws.com/bucket1/images/picture/pic1.jpg形式的内容。但是,在show视图中,当我调用image_url帮助程序时,我得到https://s3.amazonaws.com/images/picture/pic1.jpg。我在这里缺少什么?
#config/initializers/carrierwave.rb
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => 'aws_key',
:aws_secret_access_key => 'aws_secret'
}
config.fog_directory = 'bucket1'
config.fog_host = 'https://s3.amazonaws.com'
config.fog_public = true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
end
#app/uploader/image_uploader.rb
def store_dir
"images/#{model.class.to_s.underscore}"
end
#app/views/pictures/show.html.erb
<%= image_tag @picture.image_url if @picture.image? %>
答案 0 :(得分:4)
尝试删除
config.fog_host ='https://s3.amazonaws.com'
配置而不是
存储:雾
在您的上传器中。它可能会覆盖您提供的实际路径。
答案 1 :(得分:1)
虽然与这个特定问题没有直接关系,但它认为以下信息既相关又有帮助。
如果您在S3中使用非公共链接,则可以使用fog_authenticated_url_expiration
配置参数控制这些链接的TTL:
...
config.fog_public = false
config.fog_authenticated_url_expiration = 600 # 10 minutes
...