应该是这个问题的一个非常简单的解决方案,但我似乎无法让它工作。我有一个 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'
您可以在终端节点列下的以下链接中找到您的主机名 亚马逊终端节点
如果您不知道存储桶区域,可以在存储桶属性中找到它。