namespace :admin do
root :to => "admin#index"
end
我可以访问localhost:3000/admin
并且它有效。
当我部署到heroku myapp.herokuapp.com/admin
时没有。它产生了这个
ActionController::RoutingError (uninitialized constant Admin::AdminController):
我的控制器实际上是AdminController,而不是Admin :: AdminController,我不太确定区别是什么或如何解决这个问题。
同样,它都在本地运作。
答案 0 :(得分:2)
您可以在rake routes
输出中看到此命名空间路由rails使用: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
选项。)
答案 1 :(得分:0)
我离开了我的笔记本电脑,所以无法检查,但是:
root :to => "Admin#index"
应该是:
root :to => "admin#index"
代替?它可能没有任何区别。
在控制器中是否有Admin文件夹,其中包含Admin控制器?
如果您也可以向我们展示您的控制器代码,那将非常有用。