gpt4 book ai didi

ruby-on-rails - 带有root的rails命名空间路由仅在开发中有效

转载 作者:行者123 更新时间:2023-12-04 06:36:52 25 4
gpt4 key购买 nike

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

我可以访问 localhost:3000/admin它有效。
当我部署到 heroku myapp.herokuapp.com/admin才不是。它产生了这个
ActionController::RoutingError (uninitialized constant Admin::AdminController):
我的 Controller 实际上是 AdminController,而不是 Admin::AdminController,我不太确定有什么区别或如何解决这个问题。

同样,这一切都在本地工作。

最佳答案

您可以在 rake routes 中查看此命名空间路由 rails 使用 :controller => 'admin/admin' 的输出.在查找 Controller 类时,它会转换 admin/admin进入 Admin::AdminController .所以命名空间路由的 Controller 通常放在 app/controllers/namespace_name 下。目录并包裹在 NamespaceName 中模块。在您的情况下,它应该是 Admin::AdminController app/controllers/admin/admin_controller.rb 中定义的类.

不过,这真的很有趣,为什么您的配置在开发中运行良好但在生产模式下中断(我尝试并成功复制了它)。我相信这与在生产模式下加载和缓存类有关,因为设置 config.cache_classes = trueconfig/environments/development.rb导致它也打破了开发模式。

正如 zoltarSpeaks 所说,它应该是 root :to => "admin#index"而不是 root :to => "Admin#index" .

另外需要注意的是,当有多个相关 Controller 时,通常会使用路由的命名空间。如果你只需要单例AdminController你可以像这样配置你的路线:

resources :admin, :only => :index

在这种情况下,不需要进行其他更改(如果您想拥有除 index 之外的其他默认操作,只需删除 :only 选项)。

关于ruby-on-rails - 带有root的rails命名空间路由仅在开发中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8322755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com