В выводе rake routes
видно, что для этого маршрутного рельса с именами используется :controller => 'admin/admin'
. Когда дело доходит до поиска класса контроллера, он конвертирует admin/admin
в Admin::AdminController
. Таким образом, контроллеры для маршрутов в пространстве имен обычно размещаются в каталоге app/controllers/namespace_name
и помещаются в модуль NamespaceName
. В вашем случае это должен быть Admin::AdminController
класс, определенный в app/controllers/admin/admin_controller.rb
.
Тем не менее, действительно интересно, почему ваша конфигурация отлично работает в разработке, но ломается в рабочем режиме (я пытался и успешно воспроизвел ее). Я полагаю, что это имеет отношение к загрузке и кешированию классов в производственном режиме, потому что установка config.cache_classes = true
в config/environments/development.rb
также вызывает сбой в режиме разработки.
И, как заметил zoltarSpeaks , он должен быть root :to => "admin#index"
вместо root :to => "Admin#index"
.
Следует также отметить, что пространства имен для маршрутов обычно используются при наличии нескольких связанных контроллеров. Если вам нужен только один AdminController
, вы можете настроить свои маршруты следующим образом:
resources :admin, :only => :index
В этом случае никаких других изменений не требуется (если вы хотите иметь другие действия по умолчанию, кроме index
, просто удалите опцию :only
).