Rails 4 + 回形针 + S3:更改终端节点以访问用户模型中的 S3 存储桶


我认为

应该是这个问题的一个非常简单的解决方案,但我似乎无法让它工作。我有一个 Rails 4 应用程序,一个带有回形针photograph属性设置的用户模型,并且我将其链接到 S3。

下面是用户模型:

  has_attached_file :photograph,
  :styles => { :medium => "300x300>", :thumb => "100x100>" },
  :storage => :s3,
  :bucket => " my-bucket-name ",
  :default_url => '/images/:attachment/missing_:style.png',
  :s3_credentials => S3_CREDENTIALS

图像可以很好地添加到我的 S3 存储桶中,但是当我尝试使用 <%= image_tag @user.photograph.url %> 渲染图片时,它没有显示。经过进一步检查,图像 URL 是:

http://s3.amazonaws.com/my-bucket-name/users/photographs/000/000/001/original/20121103_132556.jpg?1388619625

如果我在浏览器中遵循此 URL,则会看到一个 XML 文件,如下所示:

<Error>
  <Code>PermanentRedirect</Code>
  <Message>
    The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
  </Message>
  <RequestId> ... </RequestId>
  <Bucket>my-bucket-name</Bucket>
  <HostId>
    ...
  </HostId>
  <Endpoint>my-bucket-name.s3.amazonaws.com</Endpoint>
</Error>

因此,当我在浏览器中按照 url http://my-bucket-name.s3.amazonaws.com/actives/photographs/000/000/001/original/20121103_132556.jpg?1388619625进行操作时,我可以看到图片。

如何更改用户模型中的终端节点?处理此问题的正常方法是什么?我必须补充一点,我的 S3 存储桶是北加州地区。谢谢。

解决了!刚刚在我的User模型中添加了这两行:

  :url =>':s3_domain_url',
  :path => '/:class/:attachment/:id_partition/:style/:filename',

有时问题是您的存储桶不在美国服务器中(亚马逊的默认值)。

您可以使用此更改终端节点

:s3_host_name => 'your_host_name'

您可以在终端节点列下的以下链接中找到您的主机名 亚马逊终端节点

如果您不知道存储桶区域,可以在存储桶属性中找到它。

最新更新