所以我在本地进行了更改,然后推送到github和heroku,然后当我访问我的live heroku项目时,我注意到数据库奇怪地恢复到我在本地开发期间拥有的对象。
这很可能是因为我没有正确设置我的heroku postgresql db(这是我第一次使用django设置heroku postgresql)。
以下是我的 Settings.py 的摘要,请假设括号内的信息:
ON_HEROKU = os.environ.get('ON_HEROKU')
HEROKU_SERVER = os.environ.get('HEROKU_SERVER')
if ON_HEROKU:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '<the name is here>',
'USER': '<user is here>',
'PASSWORD': '<password is here>',
'HOST': '<host is here>',
'PORT': '<port is here>',
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
我运行了一个syncdb,它似乎什么也没做。 :
(venv)$ heroku run python manage.py syncdb --account personal
Running `python manage.py syncdb` attached to terminal... up, run.7965
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
为了记录,我第一次运行syncdb时,似乎从未设置过新用户,而只是尝试安装更多表。我不知道为什么,但这似乎是一面红旗。
我还运行以下命令来检查postgres db是否存在:
(venv)$ heroku addons --account personal | grep POSTGRES
heroku-postgresql:hobby-dev HEROKU_POSTGRESQL_COBALT
即使一切似乎都没问题,我的项目也在实时使用SQLite数据库。我肯定错过了什么。任何建议表示赞赏如果需要,我可以展示更多。
答案 0 :(得分:3)
Heroku没有提供ON_HEROKU
环境变量。除非你自己设定,否则这不会起作用。
但是,无论如何,您不应该在设置中对生产数据库值进行硬编码。正如Heroku docs解释的那样,这些值是由环境变量提供的,应该使用dj-database-url库将其自动转换为正确的设置。因此,您可以使用DATABASE_URL
env var的存在与否来在硬编码的sqlite设置和动态生成的设置之间切换,或者甚至更好地在本地开发环境中设置DATABASE_URL
,指向你的sqlite文件。