2013-02-14 32 views
12

Questa è una domanda comune in qui, ma nessuna delle soluzioni fissato il mio problema, così qui va:Rails 4 assets.precompile

sto aggiungendo ace.js al mio rails4 app, Quindi quello che ho fatto è stato

- Added vendor/assets/ace/ace.js 
- Created vendor/assets/ace/index.js , with content 
    //= require ace 
- Added the following to my production.rb 
    config.assets.precompile += %w(index.js) 
    config.assets.paths << Rails.root.join("vendor", "assets", "ace") 

Così nel mio file di layout ho:

<%= javascript_include_tag "ace" %> 

e funziona bene su dev, ma quando ho eseguito:

RAILS_ENV=production bundle exec rake assets:precompile 

Non è possibile creare la versione digest del file asso.

mi sto perdendo qualcosa?

risposta

22

Si è risolto aggiungendo:

config.assets.precompile += %w(index.js) 

a config/application.rb. (non config/environments/production.rb)

Testato in Rails 4.0 beta1.

+4

Grazie, mi ha davvero aiutato. È stato un cambiamento in Rails 4? Gli utenti devono trovarsi in 'production.rb', ma i documenti non sono chiari nel sottolineare che ora dovrebbe essere impostato in' application.rb ' – cman77

+1

C'è un modo per farlo senza specificare ogni singolo file? – ahnbizcad

+0

@ahnbizcad Questo * potrebbe * funzionare: 'config.assets.precompile + = [/ (^ [^ _ \ /] | \/[^ _]) [^ \ /] * $ /]' – dhulihan

2

Nel caso in cui si aggiunga la directory ace come risorse, è necessario posizionare i file js nella directory vendor/assets/ace/javascripts (che è necessario creare).

Normalmente non è necessario config.assets.precompile += %w(index.js), Pignoni lo gestirà bene. Se c'è un solo file js da aggiungere dalla directory vendors/assets/ace, non è necessario un index.js lì. Il index.js sarebbe corretto se hai molte sottodirectory e file sotto vendor/assets/ace/javascripts/your_vendor_js_library. Un ultimo tocco: non è necessario <%= javascript_include_tag "ace" %>, duplica il contenuto di <%= javascript_include_tag "application" %>.

+0

Quindi, quando eseguo il precompilazione, creerà i file application-xxx.js e ace-xxx.js? –

+0

Penso che il file sarà solo uno - 'application-xxx.css'. Questo è il motivo alla base del precompilamento delle risorse. –

+0

L'idea di combinare le risorse in un file ottimizzato consiste nel ridurre gli hit del server. Quale sarebbe la ragione per dividere le risorse? [Un bel riferimento alla teoria] (http://guides.rubyonrails.org/asset_pipeline.html). –