2012-07-03 48 views
4

我按照Rails的一個例子3的方式,當我試圖發送控制檯來調度請求,以ActionController::Dispatcher.new.call(env).last.body Rails 3.2中的ActionController :: Dispatcher在哪裏?

我是用滑軌3.2得到

1.9.3p194 :001 > ActionController::Dispatcher.new.call(env).last.body NameError: uninitialized constant ActionController::Dispatcher'

.6,我檢查了rails api,發現他們在ActionController中刪除了調度程序,但rails指南說: ActionController :: Dispatcher.new是Rails應用程序的主要Rack應用程序對象。任何Rack兼容的Web服務器應該使用ActionController :: Dispatcher.new對象來爲Rails應用程序提供服務。

我發現rails api的v3.0.7,Dispatcher仍然存在於該版本中。

所以,這裏是我的問題:我怎麼能找到作爲ActionController.Dispatcher.new的等效方法?並且考慮到我的應用程序在Rails 3.2.6中運行良好,Rails的哪一部分現在扮演着ActionController.Dispatcher的角色?

+0

通過@bentrevor答案應該被接受爲anwser –

回答

3

它已被移動到ActionDispatch(ActionPack的/ lib目錄/ action_dispatch),並可以在這裏找到:ActionPack的/ lib目錄/ action_dispatch /路由/ route_set.rb,類稱爲

ActionController::Routing::RouteSet::Dispatcher.new 
+2

謝謝,好像'ActionDispatch ::路由:: RouteSet :: Dispatcher.new'也做到了。然而,我得到了另一個錯誤'NoMethodError:undefined method'鍵?'爲零:NilClass'找不到原因。 – Tango

4

這是什麼Rails的邊緣導遊說一下主要的Rack應用對象:

ApplicationName::Application is the primary Rack application object of a Rails application. Any Rack compliant web server should be using ApplicationName::Application object to serve a Rails application.

所以ActionController::Dispatcher.new剛剛被替換爲ApplicationName::Application。我不確定他們什麼時候做這個開關。這爲我工作。

Blog::Application.call(env).last.body 


(前幾NoMethodError: undefined method 'key?' for nil:NilClass後線告訴我們,key?方法被稱爲actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb工作向後從那裏,我們可以看到,可變

params = env['action_dispatch.request.path_parameters'] 

當它不應該是零時,我們可以在控制檯中設置env['action_dispatch.request.path_parameters'],但是這會導致另一個NoMethodError對中設置的零對象方法。因此,我們或許可以解決這個問題通過在選項哈希傳遞給Dispatcher.new,但它可能是最好只使用ApplicationName::Application

相關問題