2011-01-19 51 views
4

很奇怪,我知道但在生產中使用user_root_path不起作用。當我點擊鏈接myapp.com/user我得到一個404頁面。設計user_root_path在生產中獲得404'd但不是開發?

日誌文件不顯示吐,但一個失敗的嘗試:

Started GET "/user" for 123.125.146.23 at 2011-01-19 19:40:45 +0000 

ActionController::RoutingError (uninitialized constant User::UsersController): 

我們看一下這臺未初始化常量是開啓rails c並鍵入常數到控制檯的唯一途徑。這裏是發生了什麼:

ruby-1.9.2-p136 :005 > User::UsersController 
(irb):5: warning: toplevel constant UsersController referenced by User::UsersController 
=> UsersController 

現在一些挖掘發現,這個頂級警告可能會搞亂它。但日誌說bubkiss。

devise_for :users 
namespace :user do 
    root :to => "users#index" 
end 
resources :subdomains 
match '/user' => 'users#index' 

到:

devise_for :users 
namespace :user do 
    root :to => "subdomains#index" 
end 
resources :subdomains 
match '/user' => 'users#index', :controller => :users 

的想法是,也許生產環境不喜歡用戶#指數...所以我改成了

所以我從改變路由文件子域#指數。我可以得到/子域名沒有問題。所以實際的頁面會顯示,這是一個被欺騙的路線......任何想法?

設置:導軌3.0.3,1.1.5制定(並且是1.1.3升級後,同樣的問題)

回答

2

我用

devise_for :users do 
    match 'user' => "users#index", :as => :user_root, :constraints => { :domain => SITE_DOMAIN} 
end 

在每個development.rb或production.rb文件,你將有一個恆定的SITE_DOMAIN所以像:

::SITE_DOMAIN = "lvh.me" 
#in development.rb I was using subdomains with the helpful lvh.me google it. 

或production.rb

::SITE_DOMAIN = "mydomain.com" 

我再次需要子域名,所以這爲我工作。

設計wiki沒有爲我工作。一旦我有時間,我也會更新它,或者提交一張票,但這僅僅是那些需要它的谷歌果汁。

0

如果您在命名空間的路線,你需要你的命名空間控制器,以及。

移動控制器/ users_controller.rb到控制器/用戶/ users_controller.rb和編輯它的模塊中添加:

class User::UsersController < ApplicationController 
end 

但我的猜測是你是不是真正意義的路線使用的命名空間。

+0

讓我試試我的男人......我現在就拿任何東西。 – pjammer 2011-01-19 22:42:27

+0

沒有骰子。我的意思是我認爲我正在閱讀自述文件,以及我可以計算出來。你用設計使用root_path嗎?如果這麼回來的話。 – pjammer 2011-01-19 23:09:07

+0

我不知道這些事情。我只是解釋了Rails如何使用Ruby命名空間。壞消息! – scragz 2011-01-19 23:17:21

0

我和生產中的404用戶有同樣的問題。這是我最終解決的問題,我認爲這比解決路線問題更簡單。在ApplicationController中加入:

def after_sign_in_path_for(resource) 
    stored_location_for(:user) || landing_welcome_path 
end 

有人可以解釋環境如何影響rails 3中的路由嗎?

相關問題