Подтвердить что ты не робот

После обновления 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, ошибка сохраняется. Но даже если бы это сработало, я бы хотел понять, почему эта проблема возникла без каких-либо изменений, кроме обновления некоторых драгоценных камней.

4b9b3361

Ответ 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