2015-07-25 5 views
0

Я начал новый проект Django, используя Django 1.8. Мне нужен MongoDB как база данных, поэтому я использовал mongoengine. Соответствующий раздел моего settings.py файла ниже:Mongoengine с Django 1.8: Неправильно Конфигурировано: settings.DATABASES неправильно настроено. Пожалуйста, поставьте значение ENGINE

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.dummy' 
    } 
} 

from mongoengine import connect 
if 'test' in sys.argv: 
    from database_settings import TEST_DATABASE_PARAMS 
    connect(
     TEST_DATABASE_PARAMS['db_name'], 
     username=TEST_DATABASE_PARAMS['username'], 
     password=TEST_DATABASE_PARAMS['password'], 
     port=TEST_DATABASE_PARAMS['port'] 
    ) 
else: 
    from database_settings import DATABASE_PARAMS 
    connect(
     DATABASE_PARAMS['db_name'], 
     username=DATABASE_PARAMS['username'], 
     password=DATABASE_PARAMS['password'], 
     port=DATABASE_PARAMS['port'] 
    ) 

В DATABASE_PARAMS и TEST_DATABASE_PARAMS словари содержат правильные параметры подключения к базе данных - я проверил. Когда я бегу

python manage.py test 

однако, я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/test/testcases.py", line 942, in setUpClass 
    if not connections_support_transactions(): 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/test/testcases.py", line 907, in connections_support_transactions 
    for conn in connections.all()) 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/test/testcases.py", line 907, in <genexpr> 
    for conn in connections.all()) 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/utils/functional.py", line 60, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/db/backends/base/features.py", line 216, in supports_transactions 
    with self.connection.cursor() as cursor: 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 164, in cursor 
    cursor = self.make_cursor(self._cursor()) 
    File "/home/p/projects/myproj/virtualenv/local/lib/python2.7/site-packages/django/db/backends/dummy/base.py", line 21, in complain 
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. " 
ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details. 

Что интересно, что эта ошибка не происходит, когда я начинаю Джанго оболочки, создать объект модели, и сохраняются его в базу данных MongoDB. Оно работает. Фактический сайт также отлично работает. Это происходит только при выполнении теста.

Связано ли это с последней версией Django, являющейся версией 1.8? У меня никогда не было этих проблем в предыдущих версиях Django. Какие-нибудь идеи, что не так?

ответ

0

Django вызывает эту ошибку при попытке обработки светильников. Для mongoengine вы, вероятно, захотите сделать это вручную. Так, один быстрый и грязный раствор может быть, чтобы переопределить все методы, которые управляют соединения DB

Мое решение (это, вероятно, не самый элегантный один, но работает):

settings.py

from mongoengine import register_connection 

if 'test' in sys.argv: 
    MONGO_DATABASE_NAME = 'dbname_test' 
else: 
    MONGO_DATABASE_NAME = 'dbname' 

MONGO_DATABASE_OPTIONS = { 
    'host': '127.0.0.1', 
    'port': 99099, 
    } 
register_connection('default', MONGO_DATABASE_NAME, **MONGO_DATABASE_OPTIONS) 

tests.py

from django.test import TestCase 
from django.conf import settings 

class MongoTestCase(TestCase): 
    @classmethod 
    def setUpClass(cls): 
     return 

    @classmethod 
    def tearDownClass(cls): 
     return 

    def _fixture_setup(self): 
     for fixture in self.fixtures: 
      # process your data here 
      pass 

    def _post_teardown(self): 
     db = _get_db() 
     db.connection.drop_database(settings.MONGO_DATABASE_NAME)