当我运行python manage.py runserver
时,我收到以下错误:
Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x1cc9cd0>>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 91, in inner_run
self.validate(display_num_errors=True)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/validation.py", line 30, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 158, in get_app_errors
self._populate()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 64, in _populate
self.load_app(app_name, True)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 88, in load_app
models = import_module('.models', app_name)
File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/local/lib/python2.7/dist-packages/South-0.7.6-py2.7.egg/south/models.py", line 2, in <module>
from south.db import DEFAULT_DB_ALIAS
File "/usr/local/lib/python2.7/dist-packages/South-0.7.6-py2.7.egg/south/db/__init__.py", line 81, in <module>
db = dbs[DEFAULT_DB_ALIAS]
KeyError: 'default'
这是我的 settings.py :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'foureggs',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': '',
'PORT': '',
}
}
这是question同样的问题。答案说“你的设置中应该有一个名为'default'的数据库”。我并不是真的那样。我的数据库名称是“foureggs”,所以我显然想要使用它。
更新:当我python manage.py diffsettings
时,我得到以下输出,看起来不正确(仅粘贴相关的DATABASE行,其余部分设置看起来没问题):
DATABASES = {'default': {'ENGINE': 'django.db.backends.dummy', 'TEST_MIRROR': None, 'NAME': '', 'TEST_CHARSET': None, 'TIME_ZONE': 'UTC', 'TEST_COLLATION': None, 'PORT': '', 'HOST': '', 'USER': '', 'TEST_NAME': None, 'PASSWORD': '', 'OPTIONS': {}}}
我的项目中只有一个设置文件,它位于app目录中,这是正确的。上面的DATABASE行来自哪里?
更新2:我弄清楚问题是什么。根据{{3}}的指示,这是我向settings.py
添加的另外两行。当我评论它们时,一切正常。现在我需要弄清楚它导致问题的原因。
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] = dj_database_url.config()
答案 0 :(得分:2)
我通过设置这样的Heroku配置解决了这个问题:
# Parse database configuration from $DATABASE_URL
import dj_database_url
dbconfig = dj_database_url.config()
if dbconfig:
DATABASES['default'] = dbconfig
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
答案 1 :(得分:1)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'foureggs',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': '',
'PORT': '',
}
}
您需要填写HOST
和PORT
,否则django不知道您的数据库服务器在哪里。只有你使用的是sqlite,才有空。
对于postgreql,默认端口为5432
。如果您在同一台计算机上运行服务器,请使用'localhost'
作为'HOST'
密钥,否则将其放入数据库服务器的IP地址。
答案 2 :(得分:1)
在我的情况下,我正在开发环境(MY LAPTOP),当我收到错误时,这些是我的开发环境
import dj_database_url
DATABASES['default'] = dj_database_url.config()
if not os.environ.has_key('DATABASE_URL'):
os.environ['DATABASE_URL'] = 'postgres://my_db:my_db@localhost/my_db'
后来我把它改成了,事情开始正常了
if not os.environ.has_key('DATABASE_URL'):
os.environ['DATABASE_URL'] = 'postgres://my_db:my_db@localhost/my_db'
import dj_database_url
DATABASES['default'] = dj_database_url.config()
dj_database_url.config()函数调用需要初始化DATABASE_URL
答案 3 :(得分:0)
问题显然与南方无关,而与数据库后端无关。
您可以从这里开始:"settings.DATABASES is improperly configured" error performing syncdb with django 1.4和相关问题
如果上述答案不起作用,首先检查是否安装了psycopg2库并在sys.path中:如果没有,请安装Psycopg2 library install instructions here。
然后您最终可以将ENGINE设置更改为:'postgresql_psycopg2';通过这种方式,如果由于任何原因它无法工作,您可以绕过内置引擎。
答案 4 :(得分:0)
按照Heroku说明后我遇到了这个问题。你是对的,这些行是罪魁祸首:
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] = dj_database_url.config()
这会将DATABASES值切换回dj_database_url包使用的默认值,该包具有引擎&#34; django.db.backends.dummy&#34;等等。如果你将这些换成这些行,它应该工作:
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] = dj_database_url.config(default='postgres://localhost/foureggs')
但是,你不想将它部署到Heroku,因为它不会在那里工作。我发现的修复程序假定您正在使用虚拟环境。如果是这样,导航到虚拟环境的文件夹并进入bin目录(cd $ VIRTUAL_ENV / bin),添加一个名为&#34; postactivate&#34;并将此行保存在其中:
export DATABASE_URL='postgres://localhost/foureggs'
现在每次激活虚拟环境时,它都会以该值开始。