Pergunta

Os trilhos não podem carregar os arquivos CSS e JS de 404 erros) na produção, mas não têm problema em carregá -los no desenvolvimento.

Estou usando o Capistrano para implantação e correr Rails 3. Meu caminho no desenvolvimento é /www/myapp Mas meu caminho na produção é /www/myApp/corrente.

O aplicativo em si parece funcionar bem, então o problema parece estar isolado nos arquivos CSS/JS.

Eu tentei definir o Rails_root variável para /www/myApp/corrente dentro ambientes/produção.rb Mas não fez diferença, os arquivos ainda não carregam.

Aqui está a pilha completa do registro de produção:

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>'
Foi útil?

Solução

A mensagem de erro parece que seu aplicativo Rails está recebendo a solicitação de um arquivo estático. O Rails 3 não serve arquivos estáticos por padrão, pois o servidor da web pode fazer muito melhor. Você deve verificar a configuração do seu servidor da web. Ele deve ser configurado para a primeira aparência, se existir um arquivo estático no diretório público para uma solicitação e encaminhar apenas a solicitação ao aplicativo Rails, se não houver arquivo estático.

Como alternativa, você pode permitir que os trilhos também sirvam arquivos estáticos com config.serve_static_assets = true em config/ambientes/produção.rb. No entanto, isso não é recomendado na produção, pois você realmente não deve desperdiçar recursos de processamento de um aplicativo Rails apenas para servir arquivos estáticos. Melhor dizer ao servidor da web para fazê -lo.

Outras dicas

Corrigi esse problema executando este comando:

RAILS_ENV=production rake assets:precompile

Referência: http://guides.rubyonrails.org/asset_pipeline.html

Meu ambiente é Nginx + Unicorn + Rails4

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top