ruby-on-rails – 使用root的rails命名空间路由仅适用于开发

namespace :admin do 
  root :to => "admin#index"
end

我可以访问localhost:3000 / admin,它的工作原理.
当我部署到heroku时myapp.herokuapp.com/admin没有.它产生了这个

ActionController :: RoutingError(未初始化的常量Admin :: AdminController):

我的控制器实际上是AdminController,而不是Admin :: AdminController,我不太确定区别是什么或如何解决这个问题.

同样,它都在本地工作.

最佳答案 您可以在rake路由输出中看到此命名空间路由使用的路径:controller => “管理/管理员”.在查找控制器类时,它将admin / admin转换为Admin :: AdminController.因此,命名空间路由的控制器通常位于app / controllers / namespace_name目录下,并包含在NamespaceName模块中.在您的情况下,它应该是app / controllers / admin / admin_controller.rb中定义的Admin :: AdminController类.

虽然,为什么你的配置在开发中运行良好但在生产模式中中断(我试过并成功地再现它)真的很有趣.我相信它与生产模式下的加载和缓存类有关,因为在config / environments / development.rb中设置config.cache_classes = true会导致它在开发模式下中断.

正如zoltarSpeaks所说,它应该是root:to => “admin#index”而不是root:to => “管理#指数”.

另外需要注意的是,当存在多个相关控制器时,通常会使用路由的名称空间.如果您只需要单个AdminController,您可以像这样配置您的路由:

resources :admin, :only => :index

在这种情况下,不需要进行其他更改(如果您希望除索引之外还有其他默认操作,则只删除:only选项).

点赞