2014-04-09 4 views
44

Ho appena migrato la mia applicazione alle guide 4.1.0 da 4.1.rc2. Iniziato ottenere questi errori per i miei file JSAsset filtrato e non verrà servito: aggiungi `config.assets.precompile

ActionView::Template::Error: Asset filtered out and will not be served: add `config.assets.precompile += %w(my_js)` to `config/application.rb` and restart your server 
+3

Benvenuti al livello 1.500 reputazione! Ora puoi creare tag anche se per sbaglio. Per favore * sempre * assicurati di selezionare dal menu di completamento automatico! – Charles

risposta

51

Risposta ai controlli di integrità sollecitando da Heroku, i manutentori Rails sono fusi dal sprockets_better_errors gemma in Rails 4.1. Vedi https://github.com/rails/sprockets-rails/pull/84

L'intento è di rivelare gli errori di pipeline di asset che si vedrebbero in produzione quando si esegue l'app in modalità di sviluppo.

Probabilmente stai usando un javascript_include_tag in un layout di applicazione invece di posizionare i tuoi file JavaScript nella cartella app/assets/javascript/.

È possibile spostare i file nella cartella app/assets/javascripts/.

In alternativa, è necessario aggiornare il file diconfig/application.rb includere:

config.assets.precompile += %w(my_js) 

Si noti che il nome del file non deve includere l'estensione del file .js.

+42

Questa non è una buona ragione. Non tutti usano Heroku e questo mi ha causato problemi. Non dobbiamo precompilare i nostri file personalizzati .js o .css in fase di sviluppo.Questo è parte del motivo per cui abbiamo una modalità di sviluppo in primo luogo. –

+1

Non puoi semplicemente aggiungere il file js alla pipeline di asset in questo modo: // = richiede modernizr – JustinParker

+0

non hai bisogno dell'estensione del file? 'my_js' sarebbe il nome di' my_js.js'? Ho pensato che potevi usare il manifest. perché dovresti fare 'config.assets.precompile + =% w (my_js)' quando puoi elencarlo nel manifest? – ahnbizcad

30

Se è stato aggiunto qualcosa come stylesheet_link_tag params[:controller] all'intestazione del layout dell'applicazione, poiché si hanno applicazioni JS separate su controller diversi ma con lo stesso layout di base, si sarà abbastanza infastiditi da questo. modo rapido per ottenere su questo e continuare a lavorare (ma forse non una soluzione definitiva), con tutte le attività precompilati è di aggiungere quanto segue alla /config/initializers/assets.rb:

Rails.application.config.assets.precompile += [/.*\.js/,/.*\.css/] 

Si noti che questo è come è anche per .js.coffee e .css.scss, .js e .css sono sufficienti.

+0

grazie per l'ottimo suggerimento, funziona! – Gediminas

+0

Grazie! Davvero un'ottima soluzione. Mi chiedo perché non viene utilizzato di default nei pignoni? – Dimitry

+3

@Dimitry, è perché l'intera idea della precompilazione consiste nell'includere tutti i file necessari per determinati scopi in un unico file. Quindi in questo elenco dovrebbero essere inclusi solo i file 'di primo livello' e dovrebbero usare le direttive '// = require ...' per includere in se stessi ciò di cui hanno bisogno. La mia soluzione sopra aiuta nello sviluppo, ma se fai qualcosa come "rake assets: precompile" ti ritroverai con un enorme casino di file che non hanno mai bisogno di essere serviti. Ad esempio, se hai un progetto Angolare in cui ogni direttiva/controller/modello è un file separato, puoi facilmente avere più di 100 file ... – zmilojko

4

Idealmente le opere soluzione @zilojko ma ho anche amministratore attiva in questa app .. quindi dopo aver guardato un po 'più ho trovato la seguente soluzione:

Rails.application.config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico) 
Rails.application.config.assets.precompile << /\A(?!active_admin).*\.(js|css)\z/ 

Basta aggiungere le righe sopra per:/config/initializers/assets.rb

Il codice sopra precompila le risorse mentre ignora i file di amministrazione attivi. in modo che non vengano elaborati due volte o fuori turno portando a errori.

3

Sì, leggendo l'errore del browser, tutto quello che ho fatto è stato aggiungere la seguente riga di codice:

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

Per il file /config/initializers/assets.rb e ha funzionato.

+0

Questo ha funzionato anche per me – Megha

0

Si può detele <%= javascript_include_tag 'xxx' %> dal Erb, e in voi assets/javascript/name_space/index.js.coffee, aggiungere questo

#= require ./xxx