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