0

У меня есть раздел администратора моего сайта, в котором используется макет 'admin'.Rails custom layouts - routingerror in production

class Admin::BaseController < ActionController::Base 
    layout "admin" 

в макетах/admin.html.slim

= stylesheet_link_tag "admin", :media => "all" 
= javascript_include_tag "admin" 

Я получаю сообщение об ошибке для admin.js и admin.css

Started GET "/stylesheets/admin.css" for x.x.x.x at 2013-10-25 13:18:16 +0000 
F, [2013-10-25T13:18:16.505425 #31550] FATAL -- : 
ActionController::RoutingError (No route matches [GET] "/stylesheets/admin.css"): 

это прекрасно работает в разработке и фронтэнда активы обычно загружаются в производство, что может быть проблемой?

+0

Возможный дубликат [Rails 4 assets.precompile] (http://stackoverflow.com/questions/14882337/rails-4-assets-precompile) – pduersteler

+0

добавление 'config.assets.precompile + =% w (admin.js admin.css) 'к application.rb исправляет проблему, хотя я не знаю, почему это происходит. –

+0

Добавлено объяснение для вас. – pduersteler

ответ

2

Причина в том, что ваш сервер rails (webrick, thin, ...) обслуживает ваши активы без сбоев, где он ищет его в нескольких местах (например, app/assets или vendor/assets). В производстве рельсы предполагают, что производственный веб-сервер обрабатывает обслуживание активов, которые подаются с public/.

Поскольку компиляции на время выполнения - или их доставках Неоткомпилированных на всех - замедляет страницу сервировку, они собраны во имя его известных манифест-файлов, которые ссылаются на свои стили (то есть application.{css/js} по умолчанию), которые вы делаете путем вызова rake assets:precompile.

Добавить config.assets.precompile += %w(admin.css) в config/application.rb или config/environments/production.rb, чтобы добавить admin.css манифест так рельсы знают, что он также должен составить, что один. Затем запустите rake assets:precompile (если вы положили его позже, вам может потребоваться добавить RAILS_ENV=production).

+0

Это была моя проблема. Решил его с помощью подсказки 'config.assets.precompile + ='. – sheffler