簡體   English   中英

具有root的rails命名空間路由僅在開發中有效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM