2015-12-17 24 views
40

Da ich mehrere Edelsteine ​​alle Tests mit dem Fehler fehlschlagen aktualisiert:Nach gem Update: Test nicht mit „Asset-nicht in der Produktion erklärt werden vorkompilierte“

ActionView::Template::Error: Asset was not declared to be precompiled in production.

Add Rails.application.config.assets.precompile += %w(favicons/manifest.json.erb) to config/initializers/assets.rb and restart your server

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

Der Fehler der teilweisen _faviconsheader.html.erb zu beziehen scheint, dass die Linie umfasst:

<%= content_tag :link, nil, rel: :manifest, href: image_path("favicons/manifest.json.erb") %> 

Diese teilweise geladen in application.html.erb: <%= render partial: 'layouts/faviconsheader' %>.

Eine Idee, was diesen Fehler verursacht und was zu tun ist? Vor dem Edelstein Update wurden alle Tests bestanden.

Ich verwende Schienen 4.2.5. Eine der Edelsteine ​​wurde aktualisiert sprockets (aktualisierte Kettenräder zu Version 3.5.2). Ich lese 4 etwas auf github über Zahnräder ein Problem zu haben, aber ich bin nicht mit Version 4.


P. S. Selbst wenn ich Rails.application.config.assets.precompile += %w(favicons/manifest.json.erb) zu config/initializers/assets.rb hinzufüge, bleibt der Fehler bestehen. Aber selbst wenn das funktioniert hätte, hätte ich verstehen wollen, warum dieses Problem ohne irgendwelche Änderungen, außer der Aktualisierung einiger Edelsteine, entstanden ist.

Antwort

52

Lange Antwort + Erläuterung

Ich denke, die richtige Lösung ist, um die Datei zu den vorkompilierte Assets hinzufügen, wie die Fehlermeldung empfohlen. Vielleicht behebt das das Problem nicht, weil Sie eine erb-Datei haben, die zur Laufzeit gerendert werden muss. Ich stelle mir vor, wenn die Datei eine statische JSON-Datei wäre, würde das Problem nach dem Hinzufügen zu den vorkompilierten Assets nicht auftreten.

Wenn Sie den image_path Helper verwenden, nimmt Raketos an, dass Sie ein statisches Asset haben. Die Tatsache, dass Ihre App vor sprockets-rails 3.0 keine Fehler ausgelöst hat, ist etwas überraschend. Diese neue Version macht es offensichtlich besser, die Standards durchzusetzen. (es sieht auch wie es gibt andere Probleme mit 3.0, die möglicherweise in Kürze aktualisiert werden)

Wenn Sie erb im Manifest haben müssen, dann wäre es beste Praxis, eine Route Pfadhelfer anstelle von image_path oder asset_path zu verwenden die URL Dazu müssten Sie eine Manifest-Route zu Ihrer config/routes.rb-Datei hinzufügen und die json-Datei über eine Controller-Aktion rendern. Die Ansichtsdatei wäre Ihr Manifest .erb.


Kurzantwort

Dies begann mit mir geschieht, nachdem ein bundler update zu tun, die von 2.3.3 bis 3.0.0 meine sprockets-rails Version geändert. Eine einfache Lösung ist sprockets-rails zurück auf Version 2.3.3 in Ihrem Gemfile zurückzukehren und bundle install läuft wieder:

gem 'sprockets-rails', '2.3.3'

Als beiseite: Ich war bei dem dieses Problem in Entwicklungsumgebung und war in der Lage, es zu beheben dort läuft rake assets:precompile. Leider hat es meine Tests nicht bestanden.

+0

Ja, das hat es auch für mich verursacht/gelöst. Vielen Dank! – Marty

+0

Ritzel 3.0 tat es auch für mich –

+2

in meinem Fall, ändern Gemfile zu "Gem" Kettenräder-Schienen ',' 2.3.3'' und führen 'Bundle-Update-Kettenräder-Schienen', dann behoben. – Yoshi

6

Ich habe einen ähnlichen Fehler. Ich habe Assets.rb oder irgendetwas nicht geändert, nur meinen Server neu starten und kein Fehler mehr.


ActionView :: Template :: Fehler (Vermögen wurde nicht in der Produktion erklärt wird vorkompilierte Rails.application.config.assets.precompile += %w(rails.png)-config/initializers/assets.rb hinzufügen und den Server neu starten.): 10: "Jetzt anmelden" <% = link_to , '#', Klasse: "btn btn-lg btn-primär"%> 11: 12: 13: <% = link_to image_tag ("rails.png", alt: "Schienen logo"), 14: 'http://rubyonrails.org/'%> app/ansichten/statische_seiten/home.html.erb: 13: in `_app_views_static_pages_home_html_erb___1806898863626708249_70312070486240 '

4

Obwohl die Menschen lange Antworten gegeben haben, schlage ich sehr einfach und präzise Antwort Gehen Sie einfach auf

config/initializers/assets.rb and

Fügen Sie folgende Zeile

Rails.application.config.assets.precompile += %w(style.css)

wo style.css können durch Ihre jede ersetzt werden Dateiname für css