機能テスト中に MongoDB データベースをセットアップおよび破棄します。
私のモデルの 1 つは GridFS を利用し、そのテストを実行します (セットアップと分解も呼び出します)。という名前のクリーンな空のデータベースから始めたとしますtest_repoapi
。
python serve.py testing.ini
nosetests -a 'write-file'
2回目にテストを実行すると、次のようになります。
OperationFailure: command SON([('filemd5', ObjectId('518ec7d84b8aa41dec957d3c')), ('root', u'fs')]) failed: need an index on { files_id : 1 , n : 1 }
クライアントを見ると:
> use test_repoapi
switched to db test_repoapi
> show collections
fs.chunks
system.indexes
users
ログは次のとおりです。http://pastebin.com/1adX4svG
タイムスタンプには次の 3 種類があります。
(1)一番上がWebアプリを立ち上げた時のもの
(2) それ以前23:06:27
は最初の反復でした
(3) 他のすべては 2 回目の繰り返しでした
ご覧のとおり、データベースを削除するためにコマンドを初期化しました。考えられる 2 つの説明:
(1) Web アプリは、データベースへの 2 つのアクティブな接続を保持します。
(2) ある種の「ロック」により、インデックスが完全に作成されません。見た目fs.files
も再現されていません。
回避策は、Web アプリを停止し、再起動して、テストを実行することです。その後、エラーは表示されません。
ところで、私は Web アプリの ODM として Mongoengine を使用しています。
これについて何か考えはありますか?