设置Django时出现"ImproperlyConfigured(“settings.DATABASES配置不正确。”)"错误

8 投票
3 回答
12121 浏览
提问于 2025-04-17 15:24

我正在尝试按照这里的说明,在Heroku上设置一个Django实例。

我已经安装了Celery,接下来要进行的步骤是:

$ python manage.py syncdb

但是我遇到了以下错误:

raise ImproperlyConfigured("settings.DATABASES配置不正确。 "django.core.exceptions.ImproperlyConfigured: settings.DATABASES配置不正确。请提供ENGINE值。有关更多详细信息,请查看设置文档。

我相信我的settings.py文件放在正确的位置(项目名称/项目名称),而且我正在使用django 1.4.3,但当我尝试运行manage.py diffsettings时,输出如下:

BROKER_BACKEND = 'django' ### 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': {}}}

我完全不知道django.db.backends.dummy这个条目是从哪里来的,我的settings.py里有'ENGINE': 'django.db.backends.postgresql_psycopg2',我认为这个是正确的,尽管Heroku的说明没有告诉我在任何时候需要更新它。

有没有人能告诉我我需要在这里编辑什么?

3 个回答

1

非常感谢你,Chatri,正如你所建议的,添加默认值='sqlite://db/sqlite3.db' 解决了这个问题。

7

在你的settings.py文件中,找到DATABASE设置,然后在它后面加上这些代码行。

# Your Database setting. 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.',  # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',  # Or path to database file if using sqlite3.
        'USER': '',  # Not used with sqlite3.
        'PASSWORD': '',  # Not used with sqlite3.
        'HOST': '',  # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',  # Set to empty string for default. Not used with sqlite3.
    }
}
# Add these two lines.
import dj_database_url
DATABASES['default'] = dj_database_url.config(default='sqlite://db/sqlite3.db')
9

我遇到了同样的问题。在Heroku的文档中,地址是 https://devcenter.heroku.com/articles/django#prerequisites,上面说要在 settings.py 文件中添加以下内容:

DATABASES['default'] =  dj_database_url.config()

你可以传入一个参数:

DATABASES['default'] =  dj_database_url.config(default='postgres://user:pass@localhost/dbname')

这样就可以在本地和Heroku上进行开发了。不过,真正解决我问题的部分是Heroku的配置环境变量DATABASE_URL其实并没有设置。为了设置这个变量,我运行了:

$ heroku config

我发现数据库的URL被分配给了一个单独的配置变量。所以我创建了一个新的变量:

$ heroko config:add DATABASE_URL={#the database url}

这解决了我的问题。希望对其他遇到类似问题的人也有帮助。

撰写回答