7

pymongoを介したmongohqへのmongodb接続がしばらくアイドル状態になった後(クエリなし)、タイムアウトになるという問題が発生しています。これは問題ありませんが、データベースの接続はDjangoアプリの起動時にのみ作成されます。再接続は正常に行われているようですが、再認証する必要があります。接続が切断されて再接続され、クエリを実行しようとするOperationFailureと、次の例外値database error: unauthorized for db [shanereustle] lock type: -1が発生し、再接続しているが認証されていないことを通知します。OperationFailureからインポートしpymongo.errorsて、次の試行を使用しようとしています...ただし、エラーをキャッチして認証できないようです。

try:
    db.mongohq.shanereustle.blog.find()
except OperationFailure:
    db.authenticate() #this function reauthenticates the existing connection

しかし、何らかの理由でこれはうまくいきません。このコードの代わりに、クエリの前にdb.authenticate()を実行すると、再認証は正常に行われ、正常に機能しますが、すべてのクエリで再認証する必要はありません。これを行うための適切な方法に関する他の提案は大歓迎です、そして私は助けに感謝します。

ありがとう!

4

1 に答える 1

7

find()の代わりにfind_one()を試すことができますか?後者は、カーソルを自動的に反復処理しません。

--authデータベースでこれを試したところ、うまくいきました。

try:
  connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
  print "caught"
于 2010-08-09T17:56:18.283 に答える