Heroku中的Django错误:“请提供ENGINE值”

时间:2012-08-06 10:15:46

标签: python django heroku

我阅读并应用“在Heroku上开始使用Django”教程但在同步db时遇到了问题:

raise ImproperlyConfigured("settings.DATABASES is improperly configured." 
django.core.exceptions.ImproperlyConfigured: 
settings.DATABASES is improperly configured. Please supply the ENGINE value. 

我看了Please supply the ENGINE value Django database configuration“settings.DATABASES is improperly configured” error performing syncdb with django 1.4,但仍然收到同样的错误。执行时

heroku run python manage.py --settings=moz455.settings syncdb

我收到错误“未知命令:' - setstings = moz455.settings'”。 如何解决这个问题?

Django的版本是1.4。

6 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,但显然出于不同的原因。在https://devcenter.heroku.com/articles/django#prerequisites的Heroku文档中,它说要将以下内容添加到settings.py

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

您可以传递参数:

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

这将允许您在本地和Heroku上进行开发。实际解决我遇到的问题的部分是DATABASE_URL的Heroku配置环境变量实际上没有设置。为了设置这个,我跑了

$ heroku config

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

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

这解决了我的问题。我希望它可以帮助其他有类似问题的人。

答案 1 :(得分:8)

在此处尝试所有答案并验证DATABASE_URL存在后,没有任何效果。

我添加了第二行并且它有效

DATABASES['default'] = dj_database_url.config() <--- heroko docs says this is enough
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2' <---- add this

答案 2 :(得分:3)

确保已正确安装和设置数据库加载项。见https://devcenter.heroku.com/articles/database#no-dev-database-or-no-database-url

我运行以下内容来解决问题:

heroku addons:add heroku-postgresql
heroku pg:promote HEROKU_POSTGRESQL_CYAN

答案 3 :(得分:1)

自己解决:在manage.py中添加与此类似的代码:

CurDir = os.path.dirname(os.path.abspath(__file__))
ProjectDir = os.path.join(CurDir, "moz455")
sys.path += [ProjectDir]

使用以下命令提交更改:

git add -A
git commit -m "commit"
git push -f heroku

答案 4 :(得分:0)

尝试不同的顺序:

heroku run python manage.py syncdb --settings=moz455.settings

manage.py命令如下所示:

manage.py <command> <options>

但你这样使用它:

manage.py <options> <command>

您的其他问题(缺少ENGINE设置)可能是由syncdb命令执行期间使用的错误设置文件引起的。以上内容也应该解决它。

答案 5 :(得分:0)

有点晚了;但你只需删除所有默认的django数据库设置行;并添加heroku的一个。

它会正常工作

**编辑**或者只是你可以使用`socket.gethostname()。

示例:

if socket.gethostname() == 'xx':
    DATABASE_SETTINGS ={ }

elif socket.gethostname() == 'xxx':
    another database settings...

因此您可以在多个主机下运行您的项目。