rails namespace route с рутом работает только в разработке - PullRequest
4 голосов
/ 30 ноября 2011
namespace :admin do 
  root :to => "admin#index"
end

Я могу посетить localhost:3000/admin, и это работает. При развертывании на героку myapp.herokuapp.com/admin нет. Это произвело это

ActionController::RoutingError (uninitialized constant Admin::AdminController):

Мой контроллер фактически AdminController, а не Admin :: AdminController, и я не совсем уверен, в чем разница или как это исправить.

Опять же, все это работает локально.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

В выводе 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).

0 голосов
/ 30 ноября 2011

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

root :to => "Admin#index"

должно быть:

root :to => "admin#index"

вместо этого? Это может не иметь никакого значения.

Есть ли у вас папка Admin внутри контроллеров с контроллером Admin внутри нее?

Если бы вы могли показать нам свой код контроллера, это было бы полезно, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...