リモートMongoDB接続がすべてのクエリで認証が必要なのはなぜですか?
質問
あちこちでさまざまなことと戦った後、私はついに得ることができました botthpy Apacheで実行し、Mongodb駆動のサイトを実行します。私はDjangoアプリを実行することに慣れているので、私の質問では少しそれに関連します。
問題
ページがBottlePyを介してロードされるたびに、MongoHQ.comにあるMongoDBデータベースへの接続は再認証する必要があります(おそらく再接続する必要があることを意味します)。
私が見つけたもの
添付されました db.keep_alive()
各モデル関数の上部に機能するため、MongoDBクエリが実行される前に、簡単なクエリを実行しようとします。失敗した場合、OperationFailureまたはautoreConnectエラーをキャッチしてから、 db.authenticate()
働き。それが再保持された後、私はそれがログDBにログを追加して、再認証する必要がある頻度を監視しました。現在、すべてのページのロード(クエリの実行が必要です)で再認証する必要があります。これは正しくありません。
Djangoとの違い
私はDjangoでこれと同じ概念を使用していますが、10〜15分間のクエリが実行されない後にDB接続を認証するだけでよいことがわかりました。
私は同じドライバー、機能、方法を使用しているため、Djangoでピモンゴ接続を作成することがボトルに入っていることとは異なる理由を理解していません。私もそのようなものを使用していません。
バージョン
- ボトル: 0.9.Dev
- Django: 1.2.1ファイナル
- ピモンゴ: 1.8
助けてくれてありがとう!
更新:友人はすぐに見ることができ、私の質問に答えるのに役立つかもしれない以下に気づきました。
各リクエストは、Djangoとは対照的に、新しいPythonプロセスを起動しているようです。このプロセスでは、単一のプロセスが長期間実行され続けています。
解決
これは、ボトルとマンゴフの間の奇妙なものになりました。本当の解決策は見つかりませんでしたが、他のフレームワークでそれを再現することはできませんでした。他のアイデアは高く評価されています。
他のヒント
あなたのapache xxx.confには次のようなものが含まれていますか
WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1
WSGIProcessGroup project
最も重要なはずだと思います threads=1