Ошибка Rails 404 для файлов стилей или JavaScript

Rails не может загружать (ошибка 404) файлы CSS и JS в производственной среде, но без проблем загружает их в процессе разработки.

Я использую Capistrano для развертывания и запуска Rails 3. Мой путь в разработке — /www/myapp, а в производстве — /www/myapp/current.

Само приложение, кажется, работает нормально, поэтому проблема, похоже, связана с файлами CSS/JS.

Я попытался установить для переменной RAILS_ROOT значение /www/myapp/current в environments/production.rb, но это не имело никакого значения, файлы все равно не загружается.

Вот полный стек из производственного журнала:

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>'

person Marco    schedule 05.08.2010    source источник


Ответы (2)


Сообщение об ошибке выглядит так, будто ваше приложение Rails получает запрос на статический файл. Rails 3 не обслуживает статические файлы по умолчанию, поскольку веб-сервер может работать намного лучше. Вы должны проверить конфигурацию вашего веб-сервера. Он должен быть настроен таким образом, чтобы он сначала смотрел, существует ли статический файл в общедоступном каталоге для запроса, и перенаправлял запрос в приложение Rails только в том случае, если статического файла нет.

Кроме того, вы можете разрешить Rails также обслуживать статические файлы с помощью config.serve_static_assets = true в config/environments/production.rb. Однако это не рекомендуется в производственной среде, так как вам действительно не следует тратить ресурсы обработки приложения Rails только на обслуживание статических файлов. Лучше скажите веб-серверу сделать это.

person Zargony    schedule 05.08.2010
comment
Я совсем забыл об этом. Спасибо, что указали на это. Я настроил nginx для поиска единорога, и теперь он работает безупречно. Спасибо. - person Marco; 05.08.2010

Я исправил эту проблему, выполнив эту команду:

RAILS_ENV=production rake assets:precompile

Ссылка: http://guides.rubyonrails.org/asset_pipeline.html

Моя среда Nginx + Unicorn + Rails4

person Jerry Z.    schedule 27.06.2015