Django管理站点无法连接数据库 - 使用错误的MongoDB引擎
我之前已经让我的Django应用的管理网站正常工作过,但现在我就是找不到问题出在哪里。
在settings.py
文件里,我有MongoDB数据库的配置:
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'myapp',
'USER': 'username',
'PASSWORD': '********'
'HOST': 'myserver.com',
'PORT': '27157',
'SUPPORTS_TRANSACTIONS': False,
}
}
我知道这些设置是正确的,因为我已经有一些视图可以从数据库读取信息并显示出来。所以我确定我的应用可以连接到MongoDB数据库。
我已经配置了urls.py、admin.py和settings.py来启用管理网站(之前也确实能正常工作过)。但是现在当我尝试访问时,只看到:
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in wrapper
214. return self.admin_view(view, cacheable)(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/utils/decorators.py" in _wrapped_view
93. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
79. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in inner
195. if not self.has_permission(request):
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in has_permission
148. return request.user.is_active and request.user.is_staff
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/middleware.py" in __get__
9. request._cached_user = get_user(request)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/__init__.py" in get_user
107. user_id = request.session[SESSION_KEY]
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py" in __getitem__
47. return self._session[key]
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py" in _get_session
195. self._session_cache = self.load()
File "/usr/local/lib/python2.6/dist-packages/mongoengine/django/sessions.py" in load
26. s = MongoSession.objects(session_key=self.session_key,
File "/usr/local/lib/python2.6/dist-packages/mongoengine/queryset.py" in __get__
1151. db = _get_db()
File "/usr/local/lib/python2.6/dist-packages/mongoengine/connection.py" in _get_db
41. _connection[identity] = _get_connection(reconnect=reconnect)
File "/usr/local/lib/python2.6/dist-packages/mongoengine/connection.py" in _get_connection
33. raise ConnectionError('Cannot connect to the database')
Exception Type: ConnectionError at /admin/
Exception Value: Cannot connect to the database
我在mongoengine/connection.py
里加入了一些调试信息,可以看到用来连接数据库的连接设置是:
{'host': 'localhost', 'port': 27017}
这意味着它使用的是默认的连接设置,而不是我在settings.py
里提供的设置。你觉得这可能是什么原因呢?为什么数据库的设置没有传递到管理网站?也许我在管理配置中忘记做了什么?
编辑:
我按照这些说明配置了我的Django应用以便与MongoDB数据库一起使用。我使用的是djangotoolbox和django-nonrel。
刚才我意识到,当我设置'ENGINE': 'django_mongodb_engine'时,应该使用的MongoDB引擎是django-mongodb-engine,而不是mongoengine。但在错误追踪中我看到它正在使用mongoengine。(django-mongodb-engine并不依赖于mongoengine)我猜测在视图中使用的是正确的引擎(所以才有效),但管理网站却出于某种原因在使用mongoengine?如果我理解正确,我的应用其实根本不需要mongoengine才能工作。它只是因为我之前在尝试的时候安装的。
2 个回答
我找到问题了,特地把它写在这里,以便结束这个问题。
我在我的settings.py文件里有一行代码SESSION_ENGINE = 'mongoengine.django.sessions'
(这是因为我不小心复制粘贴的结果),这导致我的应用程序使用了mongoengine
,而不是django-mongodb-engine
。