2012-07-03 2 views
4

나는 3 방법 레일즈의 예를 다음과 같은거야, 나는 ActionController::Dispatcher.new.call(env).last.body ActionController는 어디에 있습니까 :: 레일즈 3.2의 Dispatcher?

으로, 콘솔에서 디스패처 요청을 보내려고 할 때 나는 레일 3.2을 사용했다

나는

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

있어 .6, 레일 API를 점검하고 ActionController에서 디스패처를 제거했지만 레일 가이드가 다음과 같이 말했습니다. ActionController :: Dispatcher.new는 Rails 애플리케이션의 기본 Rack 애플리케이션 객체입니다. Rack 호환 웹 서버는 ActionController :: Dispatcher.new 객체를 사용하여 Rails 애플리케이션을 제공해야합니다.

레일 API의 v3.0.7을 발견했는데 Dispatcher는 여전히 해당 버전에 있습니다.

내 질문은 다음과 같습니다. 동등한 메소드가 ActionController.Dispatcher.new 역할을하는 것을 어떻게 찾을 수 있습니까? 내 애플 리케이션이 레일즈 3.2.6에서 잘 작동한다고 가정하면, 레일스의 어느 부분이 ActionController로서의 역할을 담당 하는가?

+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'key? ' nilClass는 이유를 알 수 없습니다. – Tango

4

라는 클래스

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로 대체되었습니다 : 가이드가 차 랙 애플리케이션 객체에 대해 할 말이 가장자리를 레일. 그들이이 스위치를 만들 때 나는 확실하지 않다. 이것은 나를 위해 일한 :. NoMethodError: undefined method 'key?' for nil:NilClass

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


(처음 몇 줄이 key? 방법은 actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb에서 호출되고 있음을 말해 워킹 거꾸로 거기에서 우리가 볼 수있는 변수

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

은 없어야 할 때 nil입니다. 따라서 콘솔에 env['action_dispatch.request.path_parameters']을 설정할 수 있지만에 설정된 nil 개체에 다른 NoMethodError이 표시됩니다방법. 그래서 우리는 Dispatcher.new에 옵션 해시를 전달하지만,에 의해 아마 최고의 단지 ApplicationName::Application를 사용하는 사용자들은 수정 아마 수 있습니다.)

관련 문제