[英]'Not connected to the database' on Django admin site with MongoDB through django-nonrel
[英]Django admin site cannot connect to the database - using the wrong mongodb engine
我之前有管理站点为我的 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 工作。 安装它只是因为我之前曾尝试过它。
我发现了问题,我只是在这里发布它以结束问题。
我在 settings.py 的某处有一行SESSION_ENGINE = 'mongoengine.django.sessions'
(由于邪恶的复制/过去),这使我的应用程序使用mongoengine
而不是django-mongodb-engine
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.