モンゴエンジン 0.4、ジャンゴ 1.3.1、uwsgi 1.0.2.1
これで壁に頭をぶつけていました。mongoengine を使用する Django アプリがあります。mongodb サーバーは、私のアプリケーション サーバーとは別のボックスであり、特定のこと (ファイアウォール ルールの変更など) によって接続が失われます。
その場合、自動再接続の処理を実装して、これが発生した場合にアプリ全体がクラッシュしないようにしたいと思います。私はこれらの行に沿って何かを試していました: http://pastebin.com/HE8LSp5v (成功せずに動作するように変更しようとしましたが、これは私のコードではないことに注意してください)
そのペーストビンのコードは失敗を正常に検出し、再接続を試みますが、通常、for ループは 2 回以上反復されないため、表示されるのは、1 秒あたりの再接続試行回数であり、uwsgi スレッドごとに 1 回です.
そこで、コードを少し変更して ( https://gist.github.com/1723790に)、settings.py ファイルの一番下に追加しました。結果は uwsgi と dev サーバーで同じなので、簡単にするためにここでは dev サーバーを使用します。
開発サーバーを起動すると、次のようになります。
SETTING OVERRIDES
SETTING OVERRIDES DONE
WRAPPER ENTRY
WRAPPER ENTRY
SETTING OVERRIDES
SETTING OVERRIDES DONE
SETTING OVERRIDES
SETTING OVERRIDES DONE
WRAPPER ENTRY
WRAPPER ENTRY
SETTING OVERRIDES
SETTING OVERRIDES DONE
Validating models...
0 errors found
Django version 1.3.1, using settings 'mucs.settings'
Development server is running at http://0.0.0.0:80/
Quit the server with CONTROL-C.
mongoengine が実行されている状態で、いくつかのリクエストを行うページにアクセスします。正常に動作します。次に、mongodb をシャットダウンし、ページを更新します。次のようなものが画面に出力されます。
(REQUEST IS STARTED)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
[...]
これは、mongodb を再起動するまでこのように続きます。その時点で、ページは正しくレンダリングされ、問題なく動作します。ここで何が起こっているのか正確にはわからないので、このコードを本番環境に入れたくありません。ループに再帰している可能性があり、正しく戻ってくる AutoReconnect 例外をプルしていないようです。次に試みることは、各操作のスタックを調べて、何が起こっているかを正確に確認することかもしれません。