2

我不明白为什么 Django 不使用我在 settings.py 文件中指定的数据库引擎,而是使用 value django.db.backends.dummy

这是位于 /project/app/settings.py的settings.py文件的 DB 部分:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_db_name',
        'USER': 'my_user',
        'PASSWORD': 'my_pass',
        'HOST': '',
        'PORT': '',
    }
}

这是 Django调试日志显示的内容:

DATABASES   
{'default': {'ENGINE': 'django.db.backends.dummy',
             'HOST': '',
             'NAME': 'my_db_name',
             'OPTIONS': {},
             'PASSWORD': u'********************',
             'PORT': '',
             'TEST_CHARSET': None,
             'TEST_COLLATION': None,
             'TEST_MIRROR': None,
             'TEST_NAME': None,
             'TIME_ZONE': 'UTC',
             'USER': 'my_user'}}

我正在使用 gunicorn 和 nginx 在生产环境中运行这个站点。该站点当前已将调试模式设置为 True。

更新 1:当我运行时,python manage.py diffsettings我得到以下信息(引擎是正确的):

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'TEST_MIRROR': None, 'NAME': 'my_db_name', 'TEST_CHARSET': None, 'TIME_ZONE': 'UTC', 'TEST_COLLATION': None, 'OPTIONS': {}, 'HOST': '', 'USER': 'my_user', 'TEST_NAME': None, 'PASSWORD': 'my_pass', 'PORT': ''}}

更新 2:我也在 shell 中尝试过,按预期工作,我可以访问我的数据库:

# python manage.py shell

>>> from myapp.models import MyModel
>>> test = MyModel.objects.all()
>>> test
# Outputs all objects from MyModel.

更新3:发生了一些奇怪的事情。为了调试这个问题,我在 settings.py 中注释掉了所有INSTALLED APPS内容,重新启动了 nginx,但 Django 仍然在调试日志中显示它们:

INSTALLED_APPS  

('django.contrib.auth',
 'django.contrib.humanize',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'grappelli',
 'django.contrib.admin',
 'foureggs',
 'registration',
 'massadmin')

看起来 Django 正在使用我的 settings.py文件的某种缓存版本。

4

1 回答 1

0

这最终解决了我的问题。我不确定真正的原因是什么,但看起来它与运行 supervisord 有关。

我在我的域下定义了 2 个虚拟环境(即 /home/mydomain/www/env1 和 /home/mydomain/www/env2)。我在原始问题中描述的问题与 env2.

我首先认为是 env1 导致了问题,并且不知何故使用了它的 settings.py 而不是来自 env2 的 settings.py。但是 env1 中的 settings.py 看起来完全不同,所以这可能不是问题。

无论如何,这是我采取的步骤,它可能会为其他遇到相同问题的人提供一些指示:

  1. 我删除了 env1 (/home/mydomain/www/env1) <--这可能与问题无关,但我还是删除了环境,因为我不需要它

  2. 我杀死了这些进程:supervisord、nginx、gunicorn_django(即pkill supervisord

  3. 我启动了 supervisord(它运行 bash 脚本来启动 gunicorn_django 进程)和 nginx

网站现在按预期工作。

于 2013-02-12T12:03:23.257 回答