我无法弄清楚为什么Django不使用我在settings.py文件中指定的数据库引擎,而是使用值django.db.backends.dummy
。
以下是 my settings.py 文件的数据库部分,该文件位于/project/app/settings.py:
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 文件。
答案 0 :(得分:0)
这是最终修复我的问题的原因。我不确定究竟是什么原因,但它看起来与运行supervisord有关。
我在我的域下定义了2个虚拟环境(即/ home / mydomain / www / env1和/ home / mydomain / www / env2)。我在原始问题中描述的问题是env2。
我首先想到的是导致问题的env1,并且以某种方式使用settings.py而不是env2中的settings.py。但是env1中的settings.py看起来完全不同,所以可能不是问题。
无论如何,这是我采取的步骤,它可能会指出其他人遇到同样的问题:
我删除了env1(/ home / mydomain / www / env1)< - 这可能与问题无关但我删除了envivornment,因为我不需要它
我杀了这些进程:supervisord,nginx,gunicorn_django(即pkill supervisord
)
我启动了supervisord(运行bash脚本以启动gunicorn_django进程)和nginx
网站现在按预期工作。