Domanda

Rails non è in grado di caricare (404 errori) file CSS e JS in produzione ma non ha problemi a caricarli in sviluppo.

Sto usando Capistrano per la distribuzione e la gestione delle rotaie 3. Il mio percorso sullo sviluppo è /www/myapp Ma il mio percorso sulla produzione è /www/myapp/corrente.

L'applicazione stessa sembra funzionare bene, quindi il problema sembra essere isolato ai file CSS/JS.

Ho provato a impostare il Rails_root variabile a /www/myapp/corrente in Ambienti/Production.rb Ma non ha fatto alcuna differenza, i file non si caricano ancora.

Ecco lo stack completo dal registro di produzione:

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>'
È stato utile?

Soluzione

Il messaggio di errore sembra che la tua app Rails stia ottenendo la richiesta per un file statico. Rails 3 non serve file statici per impostazione predefinita, poiché il server web può fare molto meglio. Dovresti controllare la configurazione del tuo server web. Dovrebbe essere configurato per primo sguardo, se esiste un file statico nella directory pubblica per una richiesta e inoltrare solo la richiesta all'app Rails, se non esiste un file statico.

In alternativa, puoi consentire ai binari di servire anche file statici config.serve_static_assets = true In config/ambienti/produzione.rb. Tuttavia, ciò non è raccomandato in produzione, dal momento che non dovresti davvero sprecare le risorse di elaborazione di un'app Rails solo per servire file statici. Meglio dire al server web di farlo.

Altri suggerimenti

Ho risolto questo problema eseguendo questo comando:

RAILS_ENV=production rake assets:precompile

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

Il mio ambiente è Nginx + Unicorn + Rails4

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top