【发布时间】:2019-05-23 16:41:03
【问题描述】:
这可能只是一个简单而明显的解决方法,虽然我已经阅读了类似的问题并尝试了解决方案,但我似乎无法弄清楚。
我有一个包含图像的 Post 模型。当我上传图片时,它成功上传到 AWS,但是当我查看该帖子时该帖子没有显示它。
我的 S3 存储桶策略已设置,因此每个人都可以查看。
我的 config/environments/production.rb 文件中的 AWS Paperclip 设置为:
[...]
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: Rails.application.credentials.dig(:aws, :bucket_name),
access_key_id: Rails.application.credentials.dig(:aws, :access_key_id),
secret_access_key: Rails.application.credentials.dig(:aws,
:secret_access_key),
s3_region: Rails.application.credentials.dig(:aws, :region),
s3_storage_class: :reduced_redundancy
}
}
这是我的帖子模型:
class Post < ApplicationRecord
belongs_to :user
has_many :comments, dependent: :destroy
has_many :likes, dependent: :destroy
has_many :dislikes, dependent: :destroy
attr_accessor :uploaded_image_for_io_adapters, :file_name, :top_text, :bot_text
has_attached_file :image, styles: {
square: "250x250#",
large: "500x550!"
},
:convert_options => {
:medium => "-quality 100 -strip"
},
default_url: "/images/:style/missing.png"
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
validates_attachment :image, presence: true
validates_presence_of :poster
validates_presence_of :description
validates :user, presence: true
validates :user_id, presence: true
end
我的app/views/posts/show.html.erb
<div class="container">
<center><table border="0" style="max-width: 500px;">
<tr>
<td colspan="2"><%= image_tag @post.image.url(:large) %></td>
</tr>
<tr>
<td colspan="2"><h3 class="text-left"><%= @post.description %></h3></td>
</tr>
<tr valign="top">
<td>
<p>Posted by: <%= @post.poster %></p>
<p><small class="text-muted"><%= @post.created_at %></small></p>
</td>
<td><p class="text-right">
<div class="voting" style="text-align:center;" id="voting-div">
<%= render partial: 'posts/likes', locals: {post: @post} %>
<%= render partial: 'posts/dislikes', locals: {post: @post} %>
<%= render partial: 'posts/post_score', locals: {post: @post} %>
</div>
</p></td>
</tr>
<tr>
<td colspan="2"><p><a href="#" class="glyphicon glyphicon-flag"> Flag as inappropriate</a></p></td>
</tr>
</table></center>
<%= link_to 'Back', url_for(:back) %>
</div>
这是有趣的部分。在没有显示图像的帖子页面上,当我View Page source时,我在图像源下看到:
<td colspan="2"><img src="//bucketname-images.s3.us-east-2.amazonaws.com/posts/images/000/000/016/large/_editedimage_.png?1545616391"/></td> 如截图
当我Copy Link Location 并粘贴时,URL 是http://bucketname-images.s3.us-east-2.amazonaws.com/posts/images/000/000/016/large/_editedimage_.png?1545616391。此 URL 在我尝试的每台计算机上显示上传的图像,这让我怀疑问题出在我的视图中。我感谢任何指针
编辑
当我检查控制台时,我看到以下错误:
内容安全政策:页面设置阻止加载 资源在 http://bucketname-images.s3.us-east-2.amazonaws.com/posts/images/000/000/016/square_editedimage_.png?1545616391 (“img-src”)。
【问题讨论】:
-
您是否在浏览器控制台中看到任何错误?可能是 http/https 问题。
-
@NMPennypacker 该死的你是对的!我在控制台上看到一个错误:内容安全策略:该页面的设置阻止了在 bucketname-images.s3.us-east-2.amazonaws.com/posts/images/000/… (“img-src”) 处加载资源。
标签: ruby-on-rails ruby amazon-web-services amazon-s3 paperclip