Изображение, загруженное с помощью активного хранилища, не отображается на виде - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь обновить приложение Rails до RoR6 с ActiveStorage . В представлении я использую image_tag на прикрепленном изображении под названием "whiteboard_background" на @project.

. В браузере отображается неработающая ссылка: Ссылка

Среда: разработка и файлы, хранящиеся локально

Модель:

class Project < ApplicationRecord

  has_one_attached :whiteboard_background

Просмотр кода:

attachment: <%= @project.whiteboard_background.attached? %>
<p>image:
<%= image_tag @project.whiteboard_background if @project.whiteboard_background.attached? %>
</p>

Сервер:

Started GET "/projects/6" for 127.0.0.1 at 2020-02-19 20:29:27 +0100
Processing by ProjectsController#show as HTML
  Parameters: {"id"=>"6"}
...
ActiveStorage::Attachment Load (2.8ms)  SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_id" = $1 AND "active_storage_attachments"."record_type" = $2 AND "active_storage_attachments"."name" = $3 LIMIT $4  [["record_id", 6], ["record_type", "Project"], ["name", "whiteboard_background"], ["LIMIT", 1]]
  ↳ app/views/projects/show.html.erb:94
  ActiveStorage::Blob Load (0.6ms)  SELECT "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = $1 LIMIT $2  [["id", 13], ["LIMIT", 1]]
  ↳ app/views/projects/show.html.erb:96
  Location Load (0.5ms)  SELECT "locations".* FROM "locations" ....

I проверили, что @project.whiteboard_background.attached? равно true и в консоли Project.last.whiteboard_background.metadata выдает правильные данные изображения, которые указывают, что загрузка работает нормально.

Инспектор Firefox действительно показывает элемент с исходным путем, но говорит "не удалось загрузить изображение". То же поведение в chrome

Если я повторяю процесс в пустом тестовом приложении с нуля, он работает нормально, и я могу отобразить изображение.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Ошибка произошла из-за следующего "catch all" в конце моих маршрутов rails: get "*path", to: redirect('/')

Кажется, браузер не может загрузить изображение с URL-адресом, заданным активным хранилищем из-за к принудительному перенаправлению на root. Это не было проблемой при использовании предыдущего метода загрузки (carrierwave)

Удаление этой строки из rout.rb исправило ее.

0 голосов
/ 19 февраля 2020

Для изображений на локальном хранилище используйте это

<%= url_for(@project.whiteboard_background) %>

Если оно находится в производстве и на чем-то вроде S3, то вам, вероятно, нужно что-то подобное

<%= @project.whiteboard_background.service_url %>
...