2012-04-11 15 views
29

Mi aplicación funciona bien en modo de desarrollo.rails 3.1.3: intentar ejecutar localmente en la producción, la tubería de activos no funciona

Cuando corro en modo de producción usando RAILS_ENV=production rails s ninguno de mis archivos .css o .js se carga. (Lo hice activos precompilación, utilizando RAILS_ENV=production bundle exec rake assets:precompile.)

El registro WEBrick muestra:

ActionController :: RoutingError (No hay coincidencias ruta [GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.js"):

y

ActionController :: RoutingError (No hay coincidencias ruta [GET] "/assets/application-986dd79830088c416c1632c12999ec69.css"):

los archivos fueron compilados (de acuerdo con el archivo de registro \ production.log) y mi directorio público/activos no mostrar esos archivos con y sin la huella digital:

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 

Respuesta

47

Carriles no sirve activos estáticos en el modo de producción de forma predeterminada. Si desea desactivar esto y servir a los activos estáticos, actualizar el archivo config/environments/production.rb con esto:

config.serve_static_assets = true 

El razonamiento detrás de la configuración por defecto de Rails es que supone que se le ejecuta detrás de un servidor web estándar en el modo de producción (Apache, Nginx, etc.) que luego proxy las solicitudes a su aplicación Rails. Dado que los activos están precompilados, Apache/Nginx/etc. puede servirlos directamente sin necesidad de hablar con sus procesos Rails.

+0

que tiene sentido ahora - gracias por la excelente explicación. – jpwynn

+0

@Dylan Simplemente se encontró con el mismo problema, ¡gracias por la increíble explicación! – weltschmerz

Cuestiones relacionadas