Rails 5.2.1 Изображения в представлении не отображаются с использованием Paperclip с AWS, даже если он отображает правильный URL-адрес в src - PullRequest
0 голосов
/ 24 декабря 2018

Это может быть просто, очевидное исправление, хотя я читал похожие вопросы и пытался найти решение, я не могу понять это.

У меня есть модель Post, которая содержит изображение.Когда я загружаю изображение, оно успешно загружается в AWS, но сообщение не отображается при просмотре этого сообщения.

Моя политика корзины S3 была настроена так, что все могут просматривать.

У меня есть настройки AWS Paperclip в моем файле config/environments/production.rb как:

 [...]
  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> как на скриншоте page source displaying image

Когда я 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»).

1 Ответ

0 голосов
/ 24 декабря 2018

Если вы используете свой сайт в https, вам нужно убедиться, что ваши ссылки S3 также обслуживаются через https, чтобы избежать Content Security Policy error.Этот ответ должен привести вас туда, где вы должны быть, чтобы настроить ваши ссылки на изображения для показа более https. Можно ли настроить Paperclip для получения URL-адресов HTTPS?

Краткий ответ - использовать параметр s3_protocol:

s3_protocol: :https, или в вашем случае s3_protocol: :http

https://www.rubydoc.info/github/thoughtbot/paperclip/master/Paperclip/Storage/S3

...