【发布时间】:2011-09-27 22:13:40
【问题描述】:
Rackup 正在通过 Rack 的默认处理程序成功运行任何 Rack 应用程序。例如:
class RackApp
def call(environment)
[
'200',
{'Content-Type' => 'text/html'},
["Hello world"]
]
end
end
run RackApp.new
但是当最后一行更改为使用 Rack 的内置 CGI 处理程序时,rackup 给出“NoMethodError at / undefined method `call' for nil:NilClass”:
Rack::Handler::CGI.run RackApp.new
同样的反对意见也针对 Rack 的其他内置处理程序。例如Rack::Handler::Thin、Rack::Handler::FastCGI,甚至是 Rack::Handler::WEBrick(这是 Rack 在上面默认模式下选择的处理程序)。
这里的正确语法是什么?
【问题讨论】:
-
我很惊讶样本运行,因为没有方法运行,所以
run RackApp.new将返回一个未定义的方法错误。另一方面,CGI 处理程序可以正常工作。 -
由 rackup 执行,即
$ rackup rackapp.ru。所以 run 确实存在;并且,正如我所指出的,按预期运行。似乎缺少的是 Rack::Handler::foo.run 方法。 'rack'、'rack/handler' 和 'rack/handler/foo' 的显式要求似乎也没有让 rackup 识别它们。