1

当我运行时,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': '',
    }
}

这是一个具有相同问题的问题答案说“您的设置中应该有一个名为'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:我想出了问题所在这是我按照Heroku 部署指南settings.py的指示添加的这两行。当我将它们注释掉时,一切正常。现在我需要弄清楚为什么它会导致问题。

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()
4

5 回答 5

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')
于 2013-02-26T18:23:16.687 回答
1
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'foureggs',
        'USER': 'myuser',
        'PASSWORD': 'mypass',
        'HOST': '',
        'PORT': '',
    }
}

你需要填写,HOST否则PORTdjango不知道你的数据库服务器在哪里。只有当您使用 sqlite 时,它​​们才能为空。

对于 postgreql,默认端口是5432. 如果您在同一台机器上运行服务器,请使用'localhost'密钥'HOST',否则输入您的数据库服务器的 IP 地址。

于 2013-01-27T19:41:10.290 回答
1

就我而言,我正在开发环境(我的笔记本电脑),当我收到错误时,这些是我的开发设置

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

于 2013-10-23T13:42:26.170 回答
0

该问题显然与 South 无关,而是与 DB 后端有关。

  1. 你可以从这里开始:“settings.DATABASES is proper configured”error execution syncdb with django 1.4 and related questions

  2. 如果上述答案不起作用,首先检查是否安装了 psycopg2 库并在您的 sys.path 中:如果没有,请在此处安装Psycopg2 库安装说明

  3. 那么您最终可以将您的 ENGINE 设置更改为:'postgresql_psycopg2'; 通过这种方式,如果由于某种原因它无法工作,您可以绕过内置引擎。

于 2013-01-27T10:46:30.993 回答
0

遵循 Heroku 说明后,我遇到了这个问题。您是正确的,这些行是罪魁祸首:

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()

这会将 DATABASES 值切换回 dj_database_url 包使用的默认值,该包具有引擎“django.db.backends.dummy”等。如果将其换成这些行,它应该可以工作:

# 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),添加一个名为“postactivate”的文件并将此行保存在其中:

export DATABASE_URL='postgres://localhost/foureggs'

现在每次激活虚拟环境时,它都会以该值开始。

于 2014-04-07T01:41:17.140 回答