Ruby on rails 带有根目录的rails命名空间路由在开发中有效
我可以访问Ruby on rails 带有根目录的rails命名空间路由在开发中有效,ruby-on-rails,routing,heroku,ruby-on-rails-3.1,Ruby On Rails,Routing,Heroku,Ruby On Rails 3.1,我可以访问localhost:3000/admin,它可以正常工作。 当我部署到herokumyapp.herokuapp.com/admin时,不会。它产生了这个 ActionController::RoutingError(未初始化的常量Admin::AdminController): 我的控制器实际上是AdminController,而不是Admin::AdminController,我不太确定两者的区别是什么,也不确定如何解决这个问题 同样,它在本地工作。我不在笔记本电脑旁,因此无法检查
localhost:3000/admin
,它可以正常工作。
当我部署到herokumyapp.herokuapp.com/admin
时,不会。它产生了这个
ActionController::RoutingError(未初始化的常量Admin::AdminController):
我的控制器实际上是AdminController,而不是Admin::AdminController,我不太确定两者的区别是什么,也不确定如何解决这个问题
同样,它在本地工作。我不在笔记本电脑旁,因此无法检查,但:
namespace :admin do
root :to => "admin#index"
end
应该是:
root :to => "Admin#index"
相反?这可能没什么区别
你是否在控制器中有一个管理员文件夹,其中有一个管理员控制器
如果您也能向我们展示您的控制器代码,那将很有帮助,谢谢。您可以在
rake routes
输出中看到,对于这个名称空间的路由,rails使用:controller=>“admin/admin”
。在查找控制器类时,它将admin/admin
转换为admin::AdminController
。因此,命名空间路由的控制器通常放在app/controllers/namespace\u name
目录下,并包装在NamespaceName
模块中。在您的情况下,它应该是app/controllers/Admin/Admin\u controller.rb
中定义的Admin::AdminController
类
尽管如此,为什么您的配置在开发中运行良好,但在生产模式中却出现了中断,这真的很有趣(我尝试并成功地复制了它)。我相信它与在生产模式下加载和缓存类有关,因为在config/environments/development.rb
中设置config.cache\u classes=true
也会导致它在开发模式下崩溃
正如zoltarSpeaks所指出的,它应该是root:to=>“admin#index”
,而不是root:to=>“admin#index”
另一件需要注意的事情是,当存在多个相关控制器时,通常使用路由的名称空间。如果您只需要一个AdminController
,您可以这样配置您的路由:
root :to => "admin#index"
在这种情况下,不需要进行任何其他更改(如果您想在
索引
之外进行其他默认操作,只需删除:only
选项)。大写字母“A”只是我问题中的一个输入错误,对不起。我在admin文件夹中没有我的admin controller,但其他子控制器在admin controller中。我也尝试将管理员控制器放在该文件夹中。该路径实际上为我显示了/admin
。但是,将它放在admin文件夹中并使用admin::AdminController语法是可行的。唯一的问题是我的视图文件夹结构有点不太干净/admin/admin/index.html.erb(这可能是你所说的admin/admin?)以前我有/admin/index.html.erb以及其他管理部分控制器的文件夹。哦,现在我看到了一个问题。我的管理系统中还有两个其他控制器,它们的定义如下:admin::OrdersController
访问这些控制器会产生此错误:未初始化常量AdminController
为此,我通常将基本管理控制器定义为admin::ApplicationController
,然后定义为其他控制器为管理员::订单控制器<管理员::应用程序控制器。不过,在我的例子中,这个基本的ApplicationController
controller通常没有任何视图,只包含后来在其他管理控制器中使用的内容(例如,在过滤器之前)。
resources :admin, :only => :index