Pregunta

Los rieles no pueden cargar (error 404) archivos CSS y JS en la producción, pero no tiene problemas para cargarlos en el desarrollo.

Estoy usando Capistrano para la implementación y la ejecución de rieles 3. Mi camino en el desarrollo es /www/myapp Pero mi camino en la producción es /www/myapp/actual.

La aplicación en sí parece funcionar bien, por lo que el problema parece estar aislado a los archivos CSS/JS.

Intenté configurar el Rails_root variable a /www/myapp/actual en entornos/producción.RB Pero no hizo ninguna diferencia, los archivos aún no se cargan.

Aquí está la pila completa del registro de producción:

Started GET "/stylesheets/scaffold.css?1280867531" for 98.173.61.21 at 2010-08-04 17:04:05 -0700

ActionController::RoutingError (No route matches "/stylesheets/scaffold.css"):
/usr/local/rvm/gems/ruby-1.9.2-rc2/gems/actionpack-3.0.0.beta4/lib/action_dispatch/middleware/show_exceptions.rb:55:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0.beta4/lib/rails/rack/logger.rb:14:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/rack-1.1.0/lib/rack/runtime.rb:17:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/rack-1.1.0/lib/rack/lock.rb:11:in `block in call'
  <internal:prelude>:10:in `synchronize'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/rack-1.1.0/lib/rack/lock.rb:11:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0.beta4/lib/rails/application.rb:145:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0.beta4/lib/rails/application.rb:81:in `method_missing'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:642:in `process_client'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:715:in `block in worker_loop'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:713:in `each'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:713:in `worker_loop'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:604:in `block (2 levels) in spawn_missing_workers'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:601:in `fork'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:601:in `block in spawn_missing_workers'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:597:in `each'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:597:in `spawn_missing_workers'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:611:in `maintain_worker_count'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:270:in `start'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:29:in `run'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/bin/unicorn:123:in `<top (required)>'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/bin/unicorn:19:in `load'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/bin/unicorn:19:in `<main>'
¿Fue útil?

Solución

El mensaje de error parece que su aplicación Rails está recibiendo la solicitud de un archivo estático. Rails 3 no sirve archivos estáticos de forma predeterminada, ya que el servidor web puede hacerlo mucho mejor. Debe verificar la configuración de su servidor web. Debe configurarse para buscar primero, si existe un archivo estático en el directorio público para una solicitud y solo reenvíe la solicitud a la aplicación Rails, si no hay un archivo estático.

Alternativamente, puede habilitar que los rieles también sirvan archivos estáticos con config.serve_static_assets = true en config/entornos/producción.rb. Sin embargo, esto no se recomienda en la producción, ya que realmente no debe desperdiciar recursos de procesamiento de una aplicación Rails solo para servir archivos estáticos. Mejor dígale al servidor web que lo haga.

Otros consejos

Arreglé este problema ejecutando este comando:

RAILS_ENV=production rake assets:precompile

Referencia: http://guides.rubyonrails.org/asset_pipeline.html

Mi entorno es Nginx + Unicorn + Rails4

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top