2012-03-30 13 views

risposta

18

Rails non utilizza Rack::Static, ha una propria versione, ActionDispatch::Static. Dovresti vederlo se esegui rake middleware.

Questo viene aggiunto solo allo stack middleware Rails if config.serve_static_assets is true. Questa impostazione defaults to true, ma il valore predefinito è config/environments/production.rb turns if off.

L'idea è che durante lo sviluppo si disponga di un singolo processo semplice che è possibile eseguire e controllare che tutto funzioni e in cui le prestazioni non sono un problema, ma quando si distribuisce in produzione si configura il server Web (di solito Apache o Nginx) per servire i file statici in quanto è molto meglio di quello di Ruby.

Se si utilizza Heroku, il loro ultimo stack Cedar non utilizza un server Web separato per i file statici, pertanto, come parte dello deploy process, iniettano uno Rails plugin to serve static assets. Tutto questo plugin è impostato su serve_static_assets su true.

6

Dipende. Se stai utilizzando qualcosa come phusion passenger per eseguire la tua app, il suo comportamento predefinito è usare Apache direttamente e saltare i binari per qualsiasi contenuto statico. Se stai usando webrick (server di rails) userà molto più rotaie/codice rack per eseguire la pubblicazione statica.

Una nota però, se si utilizza apache/nginx con passeggero: in modalità produzione, poiché l'impostazione predefinita è lasciare che apache pubblichi tutto il contenuto statico, sarà necessario eseguire rake assets:precompile sull'applicazione prima di avviarla in apache o il contenuto statico non viene messo dove deve essere per apache per farlo in fretta, e in un modulo pronto per i prod.

Problemi correlati