Django管理员站点无法连接到数据库 - 使用错误的mongodb引擎

时间:2011-07-14 00:20:48

标签: python django mongodb django-admin django-nonrel

之前我的django应用程序的管理站点正在运行,但现在我无法找出问题所在。

settings.py我有mongodb数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine', 
        'NAME': 'myapp', 
        'USER': 'username',
        'PASSWORD': '********'
        'HOST': 'myserver.com',          
        'PORT': '27157',
        'SUPPORTS_TRANSACTIONS': False,
    }
}

我知道这些设置是正确的,因为我已经有一些视图从数据库中读取信息并显示它。所以我知道我的应用程序可以连接到mongodb数据库。

我有configured 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上我提供的设置。什么可能导致这个?为什么数据库设置没有传递到管理站点?也许我忘记在管理配置中做某事了?

修改
我已按照these instructions配置我的django应用程序以使用mongodb数据库。我使用 djangotoolbox django-nonrel

刚才我意识到当我设置'ENGINE'时应该使用的mongodb引擎:'django_mongodb_engine'是django-mongodb-engine而不是mongoengine。但是在堆栈跟踪中,我可以看到它正在使用mongoengine。 (django-mongodb-engine不依赖于mongoengine)我猜测正确的是在视图中使用(这就是它的工作原理)但管理员出于某种原因使用mongoengine?!?! 如果理解正确,我的应用程序甚至不需要mongoengine工作。它只是安装,因为我之前的某个时间正在试验它。

2 个答案:

答案 0 :(得分:1)

我发现了问题,我只是在这里发帖来解决问题。

我的settings.py中有一行SESSION_ENGINE = 'mongoengine.django.sessions'(由于邪恶的副本/过去),这使我的应用程序使用mongoengine而不是django-mongodb-engine

答案 1 :(得分:0)

由于admin模块执行内连接,因此mongoengine不能与Django-admin一起使用。您可以尝试使用Django的非关系版本,如django-non-rel。但是,Django-non-rel不再与最新版本的Django保持一致。

看看这个questiondjango是新的包,除了让您在Django模型中包含嵌入式文档外,还支持将管理模块连接到MongoDB。