gpt4 book ai didi

ruby-on-rails - Rails 3.2 中的 ActionController::Dispatcher 在哪里?

转载 作者:行者123 更新时间:2023-12-03 01:19:10 26 4
gpt4 key购买 nike

我正在遵循 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 应用程序提供服务。

我发现rails api v3.0.7,Dispatcher仍然存在于该版本中。

所以,我的问题是:如何找到与 ActionController.Dispatcher.new 等效的方法?鉴于我的应用程序可以在 Rails 3.2.6 上正常运行,那么 Rails 的哪一部分现在充当 ActionController.Dispatcher 的角色?

最佳答案

这是 Rails edge 指南关于主要 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'],但这会导致 initialize< 中设置的 nil 对象出现另一个 NoMethodError/ 方法。因此,我们可以通过将选项哈希传递给 Dispatcher.new 来解决这个问题,但最好只使用 ApplicationName::Application。)

关于ruby-on-rails - Rails 3.2 中的 ActionController::Dispatcher 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com