1

mongodb を使用するモジュールがあり、その統合テストを作成しています。ここの例に基づいてテストを行っています。

私が見ているエラーはOperationFailure: command SON([('listDatabases', 1)]) failed: need to login 、私が電話したときですconn.database_names()

問題は、ログイン方法がわからないことです。--username および --password 引数を subprocess.Popen に追加しようとしましたが、うまくいきませんでした。pymongo データベース オブジェクトには認証メソッドがありますが、pymongo.Connection オブジェクトには認証メソッドがありません。

Popen から mongo を起動するときに認証する方法、またはデータベース オブジェクトにアクセスできるようにこれを再構築する方法はありますか?

class MongoTemporaryInstance(object):

    _instance = None

    @classmethod
    def get_instance(cls):
        if cls._instance is None:
            cls._instance = cls()
            atexit.register(cls._instance.shutdown)
        return cls._instance

    def __init__(self):
        self._tmpdir = tempfile.mkdtemp()
        self._process = subprocess.Popen(['mongod', '--bind_ip', 'localhost',
                                      '--port', str(MONGODB_TEST_PORT),
                                      '--dbpath', self._tmpdir,
                                      '--nojournal', '--nohttpinterface',
                                      '--noauth', '--smallfiles',
                                      '--syncdelay', '0',
                                      '--maxConns', '10',
                                      '--nssize', '1', ],
                                         stdout=open(os.devnull, 'wb'),
                                         stderr=subprocess.STDOUT)

        for i in range(3):
            time.sleep(0.1)
            try:
                self._conn = pymongo.Connection('localhost', MONGODB_TEST_PORT)
            except pymongo.errors.ConnectionFailure:
                continue
            else:
                break
4

1 に答える 1

0

問題は@RobMooreが示唆したとおりでした-そのポートで認証を使用して実行されている古いmongodbプロセスがありました。ポートを変更したところ、うまくいきました!

于 2013-03-19T16:27:57.053 に答える