Rails 404 Erro para arquivos de folha de estilo ou JavaScript
-
25-09-2019 - |
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>'
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