【问题标题】:Where's ActionController::Dispatcher in Rails 3.2?Rails 3.2 中的 ActionController::Dispatcher 在哪里?
【发布时间】:2012-07-03 04:29:02
【问题描述】:

我正在关注 The Rails 3 中的示例,当我尝试在控制台中向调度程序发送请求时,使用 ActionController::Dispatcher.new.call(env).last.body

我明白了

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

我使用的是 rails 3.2.6,我检查了 rails api,发现他们删除了 ActionController 中的调度程序,但 rails 指南说:ActionController::Dispatcher.new 是 Rails 的主要 Rack 应用程序对象应用。任何 Rack 兼容的 Web 服务器都应该使用 ActionController::Dispatcher.new 对象来为 Rails 应用程序提供服务。

我找到了v3.0.7的rails api,那个版本的Dispatcher还在。

所以,这是我的问题:我怎样才能找到作为 ActionController.Dispatcher.new 的等效方法?并且鉴于我的应用程序在 rails 3.2.6 上运行良好,那么 rails 的哪一部分现在扮演 ActionController.Dispatcher 的角色?

【问题讨论】:

  • @bentrevor 的回答应该被接受为 anwser

标签: ruby-on-rails rack dispatcher


【解决方案1】:

这是 Rails edge 指南中关于主要 Rack 应用程序对象的说法:

ApplicationName::Application 是 Rails 应用程序的主要 Rack 应用程序对象。任何 Rack 兼容的 Web 服务器都应该使用 ApplicationName::Application 对象来为 Rails 应用程序提供服务。

所以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']

不应该是 nil。因此我们可以在控制台中设置env['action_dispatch.request.path_parameters'],但这会导致在initialize 方法中设置的nil 对象上出现另一个NoMethodError。所以我们可以通过将选项哈希传递给Dispatcher.new 来解决这个问题,但最好只使用ApplicationName::Application。)

【讨论】:

    【解决方案2】:

    已移至 ActionDispatch (actionpack/lib/action_dispatch),可在此处找到:actionpack/lib/action_dispatch/routing/route_set.rb,类名为

    ActionController::Routing::RouteSet::Dispatcher.new
    

    【讨论】:

    • 谢谢,看来ActionDispatch::Routing::RouteSet::Dispatcher.new 也成功了。但是,我收到另一个错误NoMethodError: undefined method 'key?' for nil:NilClass 找不到原因。
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多