使用 Rails 和 Paperclip 设置存储桶的名称放置域样式 (bucket.s3.amazonaws.com)
Posted
技术标签:
【中文标题】使用 Rails 和 Paperclip 设置存储桶的名称放置域样式 (bucket.s3.amazonaws.com)【英文标题】:Setting up bucket's name placed domain-style (bucket.s3.amazonaws.com) with Rails and Paperclip 【发布时间】:2012-06-21 03:01:29 【问题描述】:关于 url 选项的回形针文档:
您可以选择以域样式 (bucket.s3.amazonaws.com) 或路径样式 (s3.amazonaws.com/bucket) 放置存储桶的名称。
实际将存储桶的名称以域样式放置的设置看起来如何?我不能强制回形针生成像 bucket.s3.amazonaws.com 这样的网址,而不是 s3.amazonaws.com/bucket。
【问题讨论】:
我也遇到了这个问题 - 很想知道你是否解决了它! 【参考方案1】:将:url
和:path
添加到application.rb
或environment.rb
中的Paperclip
默认选项
config.paperclip_defaults =
storage: :s3,
s3_credentials:
bucket: ENV['MY_S3_BUCKET_NAME'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
,
url: ':s3_domain_url', # ADD THIS
path: '/:class/:attachment/:id_partition/:style/:filename' # ADD THIS
【讨论】:
【参考方案2】:只要这样设置:
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
或者像这样:
Paperclip::Attachment.default_options.merge!(
:url => ':s3_domain_url'
)
【讨论】:
我试过了。但它返回此错误 Paperclip::Errors::InfiniteInterpolationError 文档也让我认为这将是解决方案rubydoc.info/gems/paperclip/Paperclip/Storage/S3。但它不起作用。 您还必须使用:url
定义:path
选项,因为默认选项包括导致Paperclip::Errors::InfiniteInterpolationError
异常的":url"
。 Paperclip 错误会自动修复 S3 存储的 :path
选项...除非您在 :url
的插值中使用 :s3_*_url (是的,这是一个错误)。例如使用这个:"/:class/:attachment/:id_partition/:style/:filename'"
.
@JulienPortalier 在您的示例末尾有一个错误的单引号,这让我呆了几个小时。正确的设置是::path => "/:class/:attachment/:id_partition/:style/:filename"
【参考方案3】:
如果您的存储桶名称与 DNS 兼容,那么您可以创建 url .s3.amazonaws.com/object....
但如果它不兼容 DNS,那么您将无法根据需要创建。
谢谢
【讨论】:
实际上,如果我直接使用bucket.s3.amazonaws.com/the-path-to-image访问url,我可以看到上传的图像,我只是不能让回形针以这种方式生成url。以上是关于使用 Rails 和 Paperclip 设置存储桶的名称放置域样式 (bucket.s3.amazonaws.com)的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4 Paperclip with Devise,文件保存错误
Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?
使用Paperclip保存照片时,Rails app“无法分配内存”