2015-12-17 14 views
40

da quando ho aggiornato varie gemme tutte le prove falliscono con l'errore:Dopo l'aggiornamento gemma: prove non con "Asset non è stato dichiarato di essere precompilati in produzione"

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

L'errore sembra riferirsi alla parziale _faviconsheader.html.erb che comprende la linea:

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

Questo parziale è caricato in application.html.erb: <%= render partial: 'layouts/faviconsheader' %>.

Qualche idea su cosa causa questo errore e cosa fare? Prima che la gemma aggiorni tutti i test passati.

Uso Rails 4.2.5. Una delle gemme aggiornate era sprockets (pignoni aggiornati alla versione 3.5.2). Ho letto qualcosa su github su ruote dentate 4 che hanno un problema, ma non sto usando la versione 4.


P.S. Anche se aggiungo Rails.application.config.assets.precompile += %w(favicons/manifest.json.erb) a config/initializers/assets.rb, l'errore persiste. Ma anche se ciò avrebbe funzionato, avrei voluto capire perché questo problema si è verificato, senza alcuna modifica se non l'aggiornamento di alcune gemme.

risposta

52

lungo risposta + Spiegazione

penso che la correzione corretto è quello di aggiungere il file alle attività precompilati, come raccomandato dal messaggio di errore. Forse questo non risolve il problema perché hai un file erb che deve essere reso in fase di esecuzione. Immagino che se il file fosse un file JSON statico, non avresti ancora riscontrato il problema dopo averlo aggiunto alle risorse precompilate.

Quando si utilizza l'helper image_path, Sprockets presuppone che si disponga di un asset statico. Il fatto che la tua app non abbia generato errori prima di sprockets-rails 3.0 è alquanto sorprendente. Questa nuova versione sta facendo un lavoro migliore, a quanto pare, nel far rispettare gli standard. (sembra anche che ci siano altri problemi con 3.0 che potrebbero essere aggiornati a breve)

Se è necessario disporre di erb all'interno del manifest, sarebbe consigliabile utilizzare un helper del percorso route anziché image_path o asset_path per ottenere l'url. Ciò richiederebbe l'aggiunta di un percorso manifest al tuo file config/routes.rb e il rendering del file JSON attraverso un'azione del controllore. Il file di visualizzazione sarebbe il manifest di .erb.


Risposta breve

questo è cominciato accadendo a me dopo aver fatto un bundler update che ha cambiato la mia versione sprockets-rails da 2.3.3 a 3.0.0. Una soluzione semplice è quella di tornare indietro sprockets-rails alla versione 2.3.3 nel vostro Gemfile e correre di nuovo bundle install:

gem 'sprockets-rails', '2.3.3'

Per inciso: stavo sperimentando questo problema in ambiente di sviluppo ed è stato in grado di risolvere il problema da lì in esecuzione rake assets:precompile. Sfortunatamente, non ha superato i miei test.

+0

Sì, anche questo per me lo ha causato/risolto. Grazie! – Marty

+0

Sprockets 3.0 lo ha fatto anche per me –

+2

nel mio caso, modifica Gemfile a 'gem 'sprockets-rails', '2.3.3'' ed eseguo' bundle update sprockets-rails', quindi riparato. – Yoshi

6

Ho ricevuto un errore simile. Non ho modificato assets.rb o altro, basta riavviare il mio server e nessun errore più.


ActionView :: Template :: Error (Asset non è stato dichiarato di essere precompilati nella produzione Aggiungi Rails.application.config.assets.precompile += %w(rails.png)-config/initializers/assets.rb e riavviare il server.): 10: "Registrati adesso" <% = link_to , '#', classe: "btn btn-lg btn-primary"%> 11: 12: 13: <% = link_to image_tag ("rails.png", alt: "logo Rails"), 14: 'http://rubyonrails.org/'%> app/views/static_pages/home.html.erb: 13: in `_app_views_static_pages_home_html_erb___1806898863626708249_70312070486240 '

4

Anche se le persone hanno dato risposte lunghe suggerisco molto semplice e concisa risposta Basta andare a

config/initializers/assets.rb and

Aggiungere la seguente riga

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

dove style.css può essere sostituito da qualsiasi vostra nome del file per css

Problemi correlati