1

最近、Passenger からアプリケーション サーバーに送信された一部の XHR リクエストが正しく実行されないという奇妙な問題に直面しています。

次の一連のイベントを見てください。

  1. LB Passenger はアプリケーション サーバーにリクエストを送信します。
  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 Passenger バージョン 3.0.5
  • nginx バージョン: n

これは、Passenger が要求データ全体を 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 に答える