我在rails应用程序中设置了回形针,这在本地和heroku上运行良好,但是在帖子中上传的图像仅在heroku中保存了很短的时间。我设置了一个AWS账户并创建了一个存储桶,并按照文档将我的rails应用程序链接到AWS,以显示使用paperclip上传的图像。我在下面附上了代码片段。这些图像似乎很好地上传到AWS,但是当我创建一个帖子时,它说我的帖子已经成功创建,但是图像没有显示,它只是显示为一个断开的链接。当我单击图像属性时,它是AWS S3 URL并且在查看heroku日志时,没有已知问题。我不知道为什么图像没有显示。
config / environments / production.rb文件:
# sets paperclip to upload images to Amazon S3
# Variables directed to heroku via the command line for pw etc
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}
post.rb模型文件:
class Post < ApplicationRecord
extend FriendlyId
friendly_id :title, use: [:slugged, :finders]
has_attached_file :image, styles: { medium: "600x", thumb: "100x" }
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
end
show.html.erb文件:
<div class="image">
<%= image_tag @post.image.url(:medium) %>
</div>
我还使用以下方法正确设置了heroku:
$ heroku config:set S3_BUCKET_NAME=your_bucket_name
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key
$ heroku config:set AWS_REGION=your_aws_region
任何帮助将不胜感激。
非常感谢
答案 0 :(得分:2)
根据Judd对Paperclip, S3, Heroku: Missing Image的回答,这是因为我需要在回形针默认设置中声明s3_host_name:
# sets paperclip to upload images to Amazon S3
# Variables directed to heroku via the command line for pw etc
config.paperclip_defaults = {
storage: :s3,
s3_host_name: 's3-eu-west-1.amazonaws.com',
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}