После обновления gem: сбой теста: "Asset не был объявлен предварительно скомпилированным в процессе производства"
Так как я обновил несколько камней, все тесты завершились с ошибкой:
ActionView:: Template:: Ошибка: Asset не был объявлен предварительно скомпилированным в производстве.
Добавьте Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
в config/initializers/assets.rb
и перезапустите сервер
app/views/layouts/_faviconsheader.html.erb: 14: in _app_views_layouts__faviconsheader_html_erb__1320
app/views/layouts/application.html.erb: 21: in _app_views_layouts_application_html_erb__4340
Ошибка, похоже, относится к частичной _faviconsheader.html.erb
, которая включает в себя строку:
<%= content_tag :link, nil, rel: :manifest, href: image_path("favicons/manifest.json.erb") %>
Эта часть загружается в application.html.erb
: <%= render partial: 'layouts/faviconsheader' %>
.
Любая идея, что вызывает эту ошибку и что делать? Перед обновлением gem все тесты прошли.
Я использую Rails 4.2.5. Один из обновленных камней был sprockets
(обновленные звездочки до версии 3.5.2). Я прочитал что-то на github о проблемах с звездочками 4, но я не использую версию 4.
P.S. Даже если я добавлю Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
в config/initializers/assets.rb
, ошибка сохраняется. Но даже если бы это сработало, я бы хотел понять, почему эта проблема возникла без каких-либо изменений, кроме обновления некоторых драгоценных камней.
Ответы
Ответ 1
Длинный ответ + пояснение
Я думаю, что правильное исправление заключается в том, чтобы добавить файл в предварительно скомпилированные активы, как рекомендовано сообщением об ошибке. Возможно, это не проблема для вас, потому что у вас есть файл erb, который нужно отображать во время выполнения. Я предполагаю, что если файл был статическим json файлом, тогда вы все равно не столкнетесь с проблемой после добавления его в предварительно скомпилированные активы.
Когда вы используете помощник image_path
, Sprockets предполагает, что у вас есть статический актив. Тот факт, что ваше приложение не вызывало ошибок до того, как sprockets-rails
3.0 несколько удивительно. Эта новая версия делает лучшую работу, по-видимому, для обеспечения соблюдения стандартов. (похоже, что есть и другие проблемы с 3.0, которые могут быть вскоре обновлены)
Если вам нужно иметь erb внутри манифеста, лучше было бы использовать хелпер пути, а не image_path
или asset_path
, чтобы получить URL-адрес. Это потребует, чтобы вы добавили манифестный маршрут в ваш файл config/routes.rb
и отобразили json файл через действие контроллера. Файл представления будет вашим манифестом .erb
.
Короткий ответ
Это началось со мной после выполнения bundler update
, который изменил мою версию sprockets-rails
с 2.3.3 до 3.0.0. Простое исправление - вернуть sprockets-rails
обратно в версию 2.3.3 в Gemfile и снова запустить bundle install
:
gem 'sprockets-rails', '2.3.3'
В стороне: я столкнулся с этой проблемой в среде разработки и смог ее исправить, запустив rake assets:precompile
. К сожалению, он не прошел мои тесты.
Ответ 2
Я получил аналогичную ошибку.
Я не изменял assets.rb или что-то еще, просто перезагрузите мой сервер и больше никаких ошибок.
ActionView:: Template:: Error (Asset не был объявлен предварительно скомпилированным в процессе производства.
Добавьте Rails.application.config.assets.precompile += %w( rails.png )
в config/initializers/assets.rb
и перезапустите сервер): 10: <% = link_to "Зарегистрироваться сейчас!", "#", Класс: "btn btn-lg btn-primary" % > 11: 12: 13: <% = link_to image_tag ( "rails.png", alt: "Логотип Rails" ), 14: 'http://rubyonrails.org/'% > app/views/static_pages/home.html.erb: 13: in `_app_views_static_pages_home_html_erb ___ 1806898863626708249_70312070486240 '
Ответ 3
Хотя люди дали длительные ответы, я предлагаю очень простой и краткий ответ
Просто зайдите в
конфиг/Инициализаторы/assets.rbи
Добавьте следующую строку
Rails.application.config.assets.precompile + =% w (style.css)
где style.css может быть заменено вашим любым именем файла для css