Question

Rails ne peut pas charger (erreur 404) fichiers CSS et JS sur la production, mais n'a pas de problème de les charger dans le développement.

J'utilise Capistrano pour le déploiement et en cours d'exécution Rails 3. Mon chemin sur le développement est / www / myapp , mais mon chemin sur la production est / www / myapp / courant .

L'application elle-même semble fonctionner très bien, donc la question semble être isolé aux fichiers CSS / JS.

J'ai essayé le réglage de la RAILS_ROOT variable / www / myapp / courant dans des environnements / production.rb mais il n'a fait aucune différence , les fichiers ne sont toujours pas charger.

Voici la pile complète du journal de production:

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>'
Était-ce utile?

La solution

Le message d'erreur ressemble à votre application Rails devient la demande d'un fichier statique. Rails 3 ne sert pas les fichiers statiques par défaut, car le serveur Web peut faire beaucoup mieux. Vous devriez vérifier la configuration de votre serveur Web. Il doit être configuré pour premier coup d'oeil, si un fichier statique existe dans le répertoire public pour une demande et ne transmet la demande à l'application Rails, s'il n'y a pas de fichier statique.

Vous pouvez activer Rails pour servir également des fichiers statiques avec config.serve_static_assets = true dans config / environnements / production.rb. Cependant, ce n'est pas recommandé dans la production, puisque vous ne devriez pas gaspiller les ressources de traitement d'une application Rails seulement pour servir des fichiers statiques. Mieux vaut dire le serveur web de le faire.

Autres conseils

Je fixe ce problème en exécutant cette commande:

RAILS_ENV=production rake assets:precompile

Référence: http://guides.rubyonrails.org/asset_pipeline.html

Mon environnement est Nginx + Unicorn + Rails4

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top