Rails Paperclip Heroku AWS DIsplay图像问题

时间:2016-09-22 13:49:50

标签: ruby-on-rails amazon-web-services heroku amazon-s3 paperclip

我在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

任何帮助将不胜感激。

非常感谢

1 个答案:

答案 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'),
  }