2012-04-11 12 views
29

La mia app funziona correttamente in modalità sviluppo.rails 3.1.3: tentativo di esecuzione locale in produzione, la pipeline delle risorse non funziona

Quando corro in modalità produzione utilizzando RAILS_ENV=production rails s, nessuno dei miei file .css o .js viene caricato. (Ho fatto le attività di precompilazione, utilizzando RAILS_ENV=production bundle exec rake assets:precompile.)

Il registro webrick mostra:

ActionController :: RoutingError (Nessuna corrispondenza del percorso [GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.js"):

e

ActionController :: RoutingError (Nessuna corrispondenza del percorso [GET] "/assets/application-986dd79830088c416c1632c12999ec69.css"):

I file sono stati compilati (in base al file di log \ production.log) e la mia directory pubblica/patrimonio Mostrano quei file con e senza l'impronta digitale:

ls public/assets 
application-986dd79830088c416c1632c12999ec69.css 
application-986dd79830088c416c1632c12999ec69.css.gz 
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js 
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js.gz 
application.css 
application.css.gz 
application.js 
application.js.gz 

risposta

47

Rails non servono risorse statiche in modalità di produzione per impostazione predefinita. Se si desidera disabilitare questa e servire gli attivi statici, aggiornare il file config/environments/production.rb con questo:

config.serve_static_assets = true 

Il ragionamento dietro configurazione di default Rails' è che esso presuppone che verrà eseguito dietro un server Web standard in modalità di produzione (Apache, Nginx, ecc.) Che poi eseguiranno il proxy delle richieste all'app Rails. Poiché le risorse sono precompilate, Apache/Nginx/etc. può servirli direttamente senza dover parlare con i processi di Rails.

+0

che ha senso ora - grazie per la spiegazione superba. – jpwynn

+0

@Dylan Ho appena incontrato lo stesso problema - grazie per la fantastica spiegazione! – weltschmerz

Problemi correlati