Я устанавливаю и срываю базу данных MongoDB во время функционального теста.Почему индекс не создается после разрыва, если некоторые соединения сохраняются?
Одна из моих моделей будет использовать GridFS, и я собираюсь запустить этот тест (который также вызывает настройку и срыв). Предположим, что мы начали с чистой пустой базы данных под названием test_repoapi
:
python serve.py testing.ini
nosetests -a 'write-file'
Второй раз, когда я запустить тест, я получаю это:
OperationFailure: command SON([('filemd5', ObjectId('518ec7d84b8aa41dec957d3c')), ('root', u'fs')]) failed: need an index on { files_id : 1 , n : 1 }
If мы смотрим на клиента:
> use test_repoapi
switched to db test_repoapi
> show collections
fs.chunks
system.indexes
users
Вот лог: http://pastebin.com/1adX4svG
Есть три вида меток времени:
(1) верхний, когда я первый начал веб-приложение
(2) что-нибудь, прежде чем 23:06:27
были первая итерация
(3), то все остальное были второй итерации
Как вы можете видеть, что я сделал initializ чтобы удалить базу данных. Два возможных объяснения:
(1) Веб-приложение содержит два активных соединений с базой данных, и
(2) Какой-то «блокировка» препятствует индекс от полностью создан. Также посмотрите fs.files
не было воссоздано.
Обходным способом является остановка веб-приложения, запуск заново и запуск теста; то ошибка не появится.
Кстати, я использую Mongoengine как мой ODM в своем веб-приложении.
Любые мысли по этому поводу?
Какая версия mongoengine? И можете ли вы предоставить тестовый пример? Pymongo делает кеширование результатов sure_index. – Ross