Rails 404 Error para archivos Stylesheet o JavaScript
-
25-09-2019 - |
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>'
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