Paperclip不显示图像,而是显示标题,在rails中显示amazons3



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

这是gemfile

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协议位。这里怎么了?

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

我的Gemfile

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",

我的用户.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 bucket是否有对对象的公共访问权限。

最新更新