ruby – 如何指定Rack处理程序
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序.例如.:
class RackApp def call(environment) [ '200',{'Content-Type' => 'text/html'},["Hello world"] ] end end run RackApp.new 但是当最后一行被改为使用Rack的内置CGI处理程序时,rackup给出了“nil:NilClass的/ undefined方法`call’的NoMethodError”: Rack::Handler::CGI.run RackApp.new Rack的其他内置处理程序也提出了同样的异议.例如Rack :: Handler :: Thin,Rack :: Handler :: FastCGI,甚至是Rack :: Handler :: WEBrick(这是Rack在默认模式下选择的处理程序). 这里的语法是什么? 解决方法
rackup命令读取配置文件并启动服务器. Rack :: Handler :: XXX.run方法也启动服务器,独立于rackup命令(CGI略有不同,因为它实际上不是服务器).
更改线路时会发生什么 run RackApp.new 至 Rack::Handler::CGI.run RackApp.new 并运行rackup如下.服务器启动并解析配置文件.当到达Rack :: Handler :: CGI.run RackApp.new行时,它将像任何其他Ruby代码一样执行.在CGI处理程序的情况下,它调用应用程序并将输出写入标准输出,如果它作为CGI脚本运行(在运行rackup时查看终端).之后’rackup’服务器正常启动,但没有运行应用程序.当您尝试访问该页面时,您将获得NoMethodError,因为该应用程序为零. 使用Rack :: Handler :: Thin是类似的,但在这种情况下,Thin实际上是一个Web服务器,它启动并将服务于RackApp,但是侦听Thin的默认端口8080(不是机架默认值9292).停止Thin后(例如使用Ctrl-C),默认的机架式服务器(Mongrel或Webrick)将开始侦听端口9292,同样没有指定应用程序,因此您将获得NoMethodError. 如果您将修改后的“config.ru”作为普通的Ruby脚本而不是使用rackup运行,您将看到相同的行为,但没有启动Rackup服务器. (你需要先要求机架,所以请使用ruby -rrack config.ru).在CGI的情况下,对您的应用程序的单个调用的输出将打印到控制台,在Thin case Thin中将开始为您的应用程序提供服务. 要指定要与rackup一起使用的服务器,可以使用-s选项,例如: rackup -s thin将使用Thin启动应用程序(这次是在rackup默认端口9292上).您也可以执行rackup -s cgi,但这不会以任何有用的方式工作 – 它只是将错误页面的html打印到控制台. CGI 如果您尝试将应用程序作为CGI运行,则有几种选择.您需要创建一个CGI脚本,使用CGI处理程序调用您的应用程序.这本身就是一个直接调用Rack :: Handler :: CGI.run的ruby脚本,事实上你可以直接使用你修改过的config.ru(你可能想先重命名它并添加一个明确的require’rack’行). 或者,您可以使用shell脚本,然后调用rackup config.ru.在这种情况下,rackup检测到它作为CGI运行并自动使用正确的处理程序 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |