Rails не прекомпиляция изображений в папке app/assets/images?
У меня есть несколько изображений (svg) в папке app/assets/images. В соответствии с направляющими Rails все файлы в папке с активами должны быть автоматически предварительно скомпилированы.
Однако, когда я ссылаюсь на изображение с помощью image_tag('filename')
, он показывает мне ошибку Sprockets::Rails::Helper::AssetNotPrecompiled
Asset was not declared to be precompiled in production.
Он сообщает мне, что файл должен быть предварительно скомпилирован вручную, но почему это необходимо? Кроме того, почему он относится к производственной среде, когда я делаю все в разработке?
Ответы
Ответ 1
Возможно, потому, что вы не указали полное имя изображения. Я столкнулся с этой проблемой после обновления драгоценного камня. Прежде чем я просто использовал image_tag 'some-image'
, но, похоже, теперь вам нужно указать, какой тип изображения/расширения вы хотите использовать.
Попробуйте следующее: image_tag 'some-image.svg'
. Это сработало для меня.
Приветствия.
Ответ 2
Если вы добавили изображение после запуска сервера в процессе разработки, перезапустите сервер. Затем звездочки прекомпилируют это изображение, и ошибка исчезнет.
Ответ 3
Я уверен, что Rails еще не поддерживает .svg
, поэтому почему он игнорирует его.
Вам нужно будет включить расширения файлов в файл config/application.rb
:
#config/application.rb
config.assets.precompile += %w(.svg)
В отношении приложения, касающегося себя с окружением production
, вы должны помнить, что процесс предварительной компиляции предназначен для производства:
Первой особенностью конвейера является конкатенация активов, что может уменьшить количество запросов, которые браузер делает для создания веб-страницы. Веб-браузеры ограничены количеством запросов, которые они могут выполнять параллельно, поэтому меньшее количество запросов может означать более быструю загрузку для вашего приложения.
Концентрация активов по существу означает компиляцию ваших файлов активов в один файл, который обычно minified.
-
Хотя это можно сделать в режиме реального времени, это в основном область статических активов (которые должны быть предварительно скомпилированы). Это означает, что если вы запустите задачу rake asstes:precompile
, она будет работать в среде разработки, если вы не вызываете RAILS_ENV=production rake assets:precompile
(который устанавливает это в среду production
для этого запроса.
почему он относится к производственной среде, когда я делаю все в разработке
Приложение будет запущено в процессе производства, а не в разработке.
В конечном счете, все, что вы делаете в процессе развития, должно облегчить/улучшить работу на производстве. В смысле ваших активов это означает, что вы можете использовать многие из причуд конвейера Rails, от звездочки до препроцессоры, такие как SASS и Coffeescript