Sprockets::Rails::Helper::AssetNotFound — ресурс my_logo.jpeg отсутствует в конвейере ресурсов

Получение этой ошибки, что мне не хватает?

Sprockets::Rails::Helper::AssetNotFound in Static#index:

The asset "my_logo.jpg" is not present in the asset pipeline.

ActionView::Template::Error (The asset "my_logo.jpg" is not present in the asset pipeline.):
    1: <%= image_tag "my_logo.jpg" %>
  1. Я создаю новое приложение Ruby on Rails rails new my_app # Rails 6.0.3.2

  2. Разрешите ему установить драгоценные камни, веб-упаковщик и т. Д.

  3. Добавьте config.assets.compile = false к config/environments/development.rb

  4. Добавьте статический контроллер и индексный файл с этим содержимым.

    приложение/контроллеры/static_controller.rb

    class StaticController < ApplicationController
      def index
        render :index, layout: false
      end
    end
    

    приложение/представления/статические/index.html.erb

    <%= image_tag "my_logo.jpg" %>
    
  5. Добавьте файл my_logo.jpeg в app/assets/images/

    wget https://jpeg.org/images/jpeg2000-home.jpg -O app/assets/images/my_logo.jpg
    
  6. Предварительно скомпилируйте активы: bundle exec rake assets:precompile

  7. Запустите сервер rails как: bundle exec rails server

Я вижу, что файл находится в public/assets/, так как это имя: my_logo-484af9fb82bc8a0279ef38b527402b5697475bd8f827251f46fbb182be6c07a1.jpg

Изображение будет отображаться нормально, если я установлю для этого параметра значение true: config.assets.compile = true

Также содержимое файла манифеста от public/assets/.sprockets-manifest-a7f9f10978778e828273bf0c790645f6.json

{
  "files": {
    "manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js": {
      "logical_path": "manifest.js",
      "mtime": "2020-06-28T03:59:01+00:00",
      "size": 2,
      "digest": "75a11da44c802486bc6f65640aa48a730f0f684c5c07a42ba3cd1735eb3fb070",
      "integrity": "sha256-daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes/sHA="
    },
    "application-b324c44f04a0d0da658824105489a2676d49df561c3d06723770321fd441977c.css": {
      "logical_path": "application.css",
      "mtime": "2020-06-28T03:59:01+00:00",
      "size": 675,
      "digest": "4998ce12ecefa6ba42de36e4beac458527529608f8cf0fe6c97acd87850045e4",
      "integrity": "sha256-SZjOEuzvprpC3jbkvqxFhSdSlgj4zw/myXrNh4UAReQ="
    },
    "my_logo-484af9fb82bc8a0279ef38b527402b5697475bd8f827251f46fbb182be6c07a1.jpg": {
      "logical_path": "my_logo.jpg",
      "mtime": "2020-06-28T03:59:01+00:00",
      "size": 20974,
      "digest": "acda9fe5166e93aef6ef9572c07e9a6bf3f4879180765b3d95d9a631b852191c",
      "integrity": "sha256-rNqf5RZuk67275VywH6aa/P0h5GAdls9ldmmMbhSGRw="
    }
  },
  "assets": {
    "manifest.js": "manifest-b4bf6e57a53c2bdb55b8998cc94cd00883793c1c37c5e5aea3ef6749b4f6d92b.js",
    "application.css": "application-b324c44f04a0d0da658824105489a2676d49df561c3d06723770321fd441977c.css",
    "my_logo.jpg": "my_logo-484af9fb82bc8a0279ef38b527402b5697475bd8f827251f46fbb182be6c07a1.jpg"
  }
}

Также я включил config.assets.unknown_asset_fallback = true, чтобы посмотреть, что это за путь, он получается: http://localhost:3000/images/my_logo.jpg и когда он неверен (когда он работает), я получаю этот путь: http://localhost:3000/assets/my_logo-484af9fb82bc8a0279ef38b527402b5697475bd8f827251f46fbb182be6c07a1.jpg


person nictrix    schedule 28.06.2020    source источник


Ответы (2)


Файл в public/assets заканчивается на .jpg. Вы используете .jpeg в своем image_tag.

Вам нужно переименовать исходное изображение, чтобы оно заканчивалось на .jpg, и обновить вызов image_tag:

<%= image_tag('my_logo.jpg') %>
person meagar    schedule 28.06.2020
comment
У меня тоже была такая мысль, однако это не меняет вопроса, возникает та же ошибка. - person nictrix; 28.06.2020

Мне нужно было иметь переменную среды: RAILS_ENV=production для работы сервера и процессов прекомпиляции.

Я нашел единственную причину, по которой мне нужно было запустить его с RAILS_ENV=production, потому что в файле: config/environments/development.rb было установлено значение true: config.assets.debug = true

Если вы установите для этого параметра значение false: config.assets.debug = false, вы также сможете использовать предварительно скомпилированные активы в разработке.

Я должен был прочитать комментарий прямо над ним в исходном коде:

Режим отладки отключает объединение и предварительную обработку ресурсов.

Этот параметр может привести к значительным задержкам рендеринга вида с большим

количество сложных активов.

Кроме того, ответ @meagar был правильным - не используйте расширение jpeg, когда все преобразуется в jpg. Но я не мог этого увидеть, не имея ответа выше.

person nictrix    schedule 28.06.2020