[英]rails namespaced route with root only works in development
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,我不太確定有什么區別或如何解決。
同樣,它們都在本地工作。
您可以在rake routes
輸出中看到,此命名空間的rails使用:controller => 'admin/admin'
。 在查找控制器類時,它將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 => "Admin#index"
。
要注意的另一件事是,當存在多個相關的控制器時,通常使用路由的名稱空間。 如果您只需要一個AdminController
,就可以像這樣配置路由:
resources :admin, :only => :index
在那種情況下,不需要其他更改(如果您希望除index
之外還有其他默認操作,只需刪除:only
選項)。
我不在筆記本電腦上,因此無法檢查,但是:
root :to => "Admin#index"
應該是:
root :to => "admin#index"
代替? 它可能沒有任何區別。
控制器內是否有一個Admin文件夾,其中有一個Admin控制器?
如果您也可以向我們展示您的控制器代碼,將非常有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.