【发布时间】:2014-06-16 09:16:30
【问题描述】:
在Passenger Apache 版本上使用rack-http-logger 中间件部署机架应用程序时遇到问题。问题是 Apache 不接受该中间件正在解释的 LOG 方法请求,因此我尝试改用 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:
有什么我可能做错的想法吗?
【问题讨论】:
-
您是否调查过“机架应用程序对象中的异常 ArgumentError(参数数量错误(1 对 0))”?
-
是的,问题是这段代码在 Thin 和 Foreman 下工作,这就是让我认为这可能是乘客问题的原因。
-
听起来我们对调查的定义非常不同......那个无效的论点是什么,它是如何/为什么被设置的?
-
我猜
:method => 'POST'传递错误?但是 rack-http-logger 文档说这是一个有效的选择。 -
不,不,不:不是猜测。深入研究 Rake 和/或Passenger 和/或其他代码,并使用
p或pp直接从代码中识别什么 正在传递。然后使用caller确定它通过的原因。
标签: ruby apache passenger rack middleware