0

我正在使用回形针和亚马逊 s3 为我的网站存储图像。在开发模式下,如果没有 s3,一切都可以正常工作,但是当我尝试使用 s3 时,它会显示图像的标题而不是图像。我已经复制了 heroku 指南https://devcenter.heroku.com/articles/paperclip-s3中的内容。

这是宝石文件

gem 'paperclip'
gem 'aws-sdk', '~> 2.3'

这是在类配置文件的 profile.rb 中

has_attached_file :avatar,
                       :styles => { :medium => "300x300>", :thumb => "100x100>" },
                       :default_url => ":style/missing.jpg"
    validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/

这是在生产中.rb

config.paperclip_defaults = {
    storage: :s3,
    s3_host_name: "s3-#{ENV['AWS_REGION']}.amazonaws.com",
    :s3_protocol => :https,
    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'),
    }
  }

意见

<%= image_tag @user.profile.avatar.url(:medium) %>  

我已经复制了 heroku 指南并添加了主机名和 s3 协议位。这里有什么问题?

4

1 回答 1

0

我遵循了heroku指南,并成功地在开发环境中使用回形针将用户图像上传到了S3,我还可以在用户的​​个人资料中看到图像。

我的宝石文件

gem 'paperclip'
gem 'aws-sdk-s3'

我的发展.rb

config.paperclip_defaults = {
storage: :s3,
s3_host_name: "s3.#{ENV['AWS_REGION']}.amazonaws.com",
s3_protocol: :https,
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'),
  }
}

你有这个(这可能会导致问题):

s3_host_name: "s3-#{ENV['AWS_REGION']}.amazonaws.com",

我有这个(s3之后的一个点):

s3_host_name: "s3.#{ENV['AWS_REGION']}.amazonaws.com",

我的user.rb和你的一样

has_attached_file :avatar,
                       :styles => { :medium => "300x300>", :thumb => "100x100>" },
                       :default_url => ":style/missing.jpg"

# Validate the attached image is image/jpg, image/png, etc
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/

我的show.html.erb

<%= image_tag @user.avatar.url(:medium) %>

我使用的是 rails 5.2 版本,上面的代码对我有用。还要检查您的 S3 存储桶是否可以公开访问对象。

于 2019-09-09T16:13:00.923 回答