Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?
Posted
技术标签:
【中文标题】Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?【英文标题】:Paperclip does not show image but instead shows title with amazon s3 in rails? 【发布时间】:2020-01-10 22:40:11 【问题描述】:我正在使用回形针和 amazon 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 协议位。这里有什么问题?
【问题讨论】:
【参考方案1】:我已遵循 heroku 指南,并成功地在开发环境中使用回形针将用户图像上传到 S3,并且我还可以在用户个人资料中看到该图像。
我的Gemfile:
gem 'paperclip'
gem 'aws-sdk-s3'
我的development.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 存储桶是否可以公开访问对象。
【讨论】:
嗨,当我执行您所做的操作时,它显示 LoadError(无法加载此类文件 - aws-sdk(您可能需要安装 aws-sdk gem)):这就是我更改 gem 的原因回到 gem 'aws-sdk', '~> 2.3' 但它显示了同样的错误并且图片没有显示但标题显示了。感谢您的帮助! 另外,当我检查我的存储桶时,图像就在那里! 我公开了所有内容,现在可以了。但是公开它有危险吗? 公开您的 S3 存储桶以进行写入、更新和删除是很危险的。您也可以仅通过编程模式限制对存储桶的写入访问(拥有密钥对的人只能修改。这是通过 IAM 策略实现的)。对于读取操作,这取决于您是否要保护您的图像/数据不被公众访问。有多种方法可以保护您的 s3 资源。看看这个链接aws.amazon.com/premiumsupport/knowledge-center/…以上是关于Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?的主要内容,如果未能解决你的问题,请参考以下文章
如何显示来自 S3/Paperclip/Heroku 的图像?
ruby 使用Paperclip自定义处理器在Rails中模糊图像