1

最近,我们遇到了一个奇怪的问题,即从Passenger 发送到我们的应用程序服务器的一些XHR 请求无法正常执行。

请查看以下事件链:

  1. LB 乘客向应用服务器发送请求。
  2. 在尝试确定该请求应该由哪个控制器操作处理时,Rails 返回 NoMethodError 异常。

    Rails error log:
    
    
    Started POST "/user/" for 194.29.65.21 at 2013-03-25 13:14:38 +0100
      NoMethodError (undefined method `[]' for nil:NilClass):
    

    当 Rails 能够确定一个请求应该被路由到哪个控制器/动作时,这是一个日志:

    Started POST "/User/" for 194.29.65.21 at 2013-03-25 13:14:38 +0100
         Processing by Web::UserController#index as 
         Parameters: {"c"=>"1", "fref"=>""}
    
  3. 此错误会传播到引发以下错误的应用程序服务器乘客:

    [ pid=20071 thr=3074915216 file=ext/nginx/HelperAgent.cpp:577
    time=2013-03-24 22:25:58.257 ]: Uncaught exception in PassengerServer
    client thread:    exception: Cannot read response from backend
    process: Connection reset by peer (104)    backtrace:
         in 'void Client::forwardResponse(Passenger::SessionPtr&, Passenger::FileDescriptor&)' (HelperAgent.cpp:361)
         in 'void Client::handleRequest(Passenger::FileDescriptor&)' (HelperAgent.cpp:503)
         in 'void Client::threadMain()' (HelperAgent.cpp:596)
    
  4. 最后 LB Nginx 给出了这个错误: up stream status = 500 error.

对于给定的路线,此错误是随机出现的。甚至这个错误的发生频率也是随机变化的。

系统详情:

  • 红宝石:1.9.2p180
  • 导轨:3.0.5
  • Phusion 乘客版本 3.0.5
  • nginx版本:n

我们认为这是因为乘客未能将整个请求数据发送到 Rails,导致 Rails 无法确定有效的控制器操作。

4

2 回答 2

0

查看 Nginx 的乘客配置,我在 Nginx 的乘客方面遇到了很多问题。

http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerSpawnMethod专门验证此配置并将其添加到父节点的 nginx.conf 中。

于 2013-03-25T15:38:24.267 回答
0

我们刚刚调试,发现问题不在于 XHR,而在于 POST 请求。

另外现在我们正在使用乘客 3.0.5,是否知道升级到乘客 3.0.19 是否有帮助?

于 2013-03-25T17:27:30.807 回答