使用Rails和Paperclip设置放置在域样式(bucket.s3.amazonaws.com)中的存储桶名称

15
关于URL选项的文档:

您可以选择将存储桶的名称放置在域样式(bucket.s3.amazonaws.com)或路径样式(s3.amazonaws.com/bucket)中。

如何设置才能实际上让存储桶的名称采用域样式?我无法强制Paperclip生成像bucket.s3.amazonaws.com而不是s3.amazonaws.com/bucket这样的URL。


我也遇到了这个问题 - 如果您解决了它,我很感兴趣! - michaelrshannon
3个回答

14

只需将其设置为以下内容:

Paperclip::Attachment.default_options[:url] = ':s3_domain_url'

或者像这样:

Paperclip::Attachment.default_options.merge!(
  :url => ':s3_domain_url'
)

1
我尝试过了,但它返回了这个错误Paperclip::Errors::InfiniteInterpolationError。文档也让我觉得这可能是解决方案http://rubydoc.info/gems/paperclip/Paperclip/Storage/S3。但它并没有起作用。 - huoxito
24
您还必须使用 :url 选项定义 :path,因为默认值包含 ":url",会导致 Paperclip::Errors::InfiniteInterpolationError 异常。 除非您在 :url 的插值中使用 :s3_*_url,否则 Paperclip 中的 bug 将自动修复 S3 存储的 :path 选项(是的,这是一个 bug)。例如,可以使用以下内容:"/:class/:attachment/:id_partition/:style/:filename'" - Julien Portalier
2
@JulienPortalier,你的示例末尾有一个错误的单引号,让我困惑了几个小时。正确的设置是::path => "/:class/:attachment/:id_partition/:style/:filename" - Sky

4
在您的application.rbenvironment.rb中的Paperclip默认选项中添加:url:path
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
}

1
如果您的存储桶名称与DNS兼容,则可以创建URL .s3.amazonaws.com/object....,但如果不兼容,则无法按照您的要求创建。
谢谢。

实际上,如果我直接访问bucket.s3.amazonaws.com/the-path-to-image的URL,我可以看到上传的图像,但我无法让paperclip以这种方式生成URL。 - huoxito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接