Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带有根目录的rails命名空间路由在开发中有效_Ruby On Rails_Routing_Heroku_Ruby On Rails 3.1 - Fatal编程技术网

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
,它可以正常工作。 当我部署到heroku
myapp.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