1

私はMongo 2.2.0を実行しており、シャードおよびレプリケートされています.Python(pymongo 2.1.1)を使用すると、少し奇妙な動作が発生します。

注意事項:

アクセスしようとしている各データベースに、適切な権限を持つユーザーが作成されています。

以下はmongoルーター経由で接続しています。

MONGO_URI は、デプロイメントの初期段階で設定された環境変数です: $MONGO_URI = "mongodb://USER:PASSWORD@localhost:27017/DB"

mongo シェルを介して認証、読み取り、書き込みを正常に行うことができます。Python セッションを起動することもでき、次のように正常に動作します。

    >>> import pymongo
    >>> import os
    >>> c = pymongo.Connection(os.environ['MONGODB_URI'])
    >>> c.DB.COLL.insert(dict(a=2))
    >>> list(c.DB.COLL.find())

しかし、挿入時に safe=True を使用すると:

    >>> import pymongo
    >>> import os
    >>> c = pymongo.Connection(os.environ['MONGODB_URI'])
    >>> c.DB.COLL.insert(dict(a=2), safe=True)

次のエラーが表示されます。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "local/lib/python2.7/site-packages/pymongo/collection.py", line 312, in insert
    continue_on_error, self.__uuid_subtype), safe)
  File "local/lib/python2.7/site-packages/pymongo/connection.py", line 822, in    _send_message
    return self.__check_response_to_last_error(response)
  File "local/lib/python2.7/site-packages/pymongo/connection.py", line 759, in __check_response_to_last_error
    helpers._check_command_response(error, self.disconnect)
  File "local/lib/python2.7/site-packages/pymongo/helpers.py", line 128, in _check_command_response
    raise OperationFailure(msg % response["errmsg"])
pymongo.errors.OperationFailure: unauthorized

私は間違った方法で何かを呼んでいますか、それともauthとsafeのバグがどこかにあるのでしょうか? 私は最初に自分のエラーを信じる傾向がありますが、insert ステートメントでセーフをオフにしておくと、正しい動作が得られます。

私はこれらのトピックを調べました:

安全な挿入のための Pymongo 権限の問題 にアクセスしようとすると、Pymongo は db アサーション エラーを発生させます

...しかし、認証を無効にする必要のない答えは見つかりませんでした。

編集:私も googlegroup に投稿し、答えを得ました。それは pymongo のバグでした。2.3 にアップグレードしたところ、すべてが期待どおりに機能しました。

https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/UlbW4942xsw

4

0 に答える 0