Ruby Apache上的乘客问题

Ruby Apache上的乘客问题,ruby,apache,passenger,rack,middleware,Ruby,Apache,Passenger,Rack,Middleware,在Apache版本上部署带有中间件的机架应用程序时遇到问题。问题是Apache不接受日志方法请求,这个中间件正在解释日志方法请求,所以我尝试使用POST 这是我的config.ru: require 'bundler' Bundler.require $stdout.sync = true use Rack::HTTPLogger, :method => 'POST' run lambda { [404, {'Content-Type' => 'text/html'}, ['Pa

在Apache版本上部署带有中间件的机架应用程序时遇到问题。问题是Apache不接受日志方法请求,这个中间件正在解释日志方法请求,所以我尝试使用POST

这是我的config.ru:

require 'bundler'
Bundler.require

$stdout.sync = true

use Rack::HTTPLogger, :method => 'POST'
run lambda { [404, {'Content-Type' => 'text/html'}, ['Page Not Found']] }
在Thin上一切正常,但我在Passenger上有一个错误:

App 57235 stderr: [ 2014-04-30 08:30:05.9440 57256/0x007ffe8c018af0(Worker 1) utils.rb:68 ]: 
*** Exception ArgumentError in Rack application object (wrong number of arguments (1 for 0)) (process 57256, thread 0x007ffe8c018af0(Worker 1)):
App 57235 stderr:   from config.ru:7:in `block (2 levels) in <main>'
App 57235 stderr:   from /Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/rack-http-logger-0.1.0/lib/rack/http-logger.rb:17:in `call'
App 57235 stderr:   from /Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/rack-http-logger-0.1.0/lib/rack/http-logger.rb:17:in `call'
App 57235 stderr:   from /Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
App 57235 stderr:   from /Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
App 57235 stderr:   from /Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
App 57235 stderr:   from /Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion_passenger/request_handler.rb:448:in `block (3 levels) in start_threads'
[Wed Apr 30 08:30:05 2014] [error] [client 172.20.16.168] Premature end of script headers: 
App 57235标准:[2014-04-30 08:30:05.9440 57256/0x007ffe8c018af0(工人1)utils.rb:68]:
***机架应用程序对象中的异常参数错误(参数数目错误(1代表0))(进程57256,线程0x007ffe8c018af0(工作线程1)):
App 57235标准:来自配置ru:7:in‘区块(2层)in’
App 57235 stderr:from/Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/rack-http-logger-0.1.0/lib/rack/http-logger.rb:17:in'call'
App 57235 stderr:from/Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/rack-http-logger-0.1.0/lib/rack/http-logger.rb:17:in'call'
App 57235标准配置:from/Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion\u passenger/rack/thread\u handler\u extension.rb:74:in'process\u request'
App 57235 stderr:from/Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion\u passenger/request\u handler/thread\u handler.rb:141:in“接受和处理下一个请求”
App 57235 stderr:from/Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion\u passenger/request\u handler/thread\u handler.rb:109:in'main\u loop'
App 57235 stderr:from/Users/apps/.rvm/gems/ruby-1.9.3-p545/gems/passenger-4.0.41/lib/phusion\u passenger/request\u handler.rb:448:start\u线程中的“块(3级)”中
[Wed Apr 30 08:30:05 2014][error][client 172.20.16.168]脚本头过早结束:
知道我可能做错了什么吗?

您的应用程序对象(传递给
运行的lambda)不符合。根据规范,它必须只接受1个参数,但lambda不接受任何参数,因此会得到一个ArgumentError


Phusion乘客使用机架的方式与Thin不同。由于机架规范未指定如何处理违反规范的情况,因此每台服务器的处理方式不同。这就是为什么某些(错误的)代码在Thin上工作,在Phusion Passenger上可能不工作,反之亦然。

您是否调查过“Rack application object中的Exception ArgumentError(错误的参数数(1代表0))?是的,问题是此代码在Thin下与Foreman一起工作,这就是为什么我认为这可能是一个乘客问题。听起来我们对调查有一个非常不同的定义…那个无效的参数是什么,以及它是如何/为什么被设置的?我猜
:method=>'POST'
传递错误了?但是rack http logger文档说这是一个有效的选项。不,不,不:不是猜测。潜入耙和/或乘客和/或其他代码,使用
p
pp
直接从代码中识别正在传递的内容。然后使用
caller
来确定它被通过的原因。我现在明白了,这显然是我的错误。谢谢。