我阅读并应用“在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。
答案 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...
因此您可以在多个主机下运行您的项目。