gpt4 book ai didi

Django:从本地开发推送时,SQLite 覆盖 heroku 上的 POSTGRESQL 数据库

转载 作者:行者123 更新时间:2023-11-29 12:05:14 24 4
gpt4 key购买 nike

所以我在本地进行了更改,然后推送到 github 和 heroku,然后当我访问我的实时 heroku 项目时,我注意到数据库奇怪地恢复到我在本地开发期间拥有的对象。

这很可能是因为我没有正确设置我的 heroku postgresql 数据库(这是我第一次使用 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 数据库是否存在:

(venv)$ heroku addons --account personal | grep POSTGRES
heroku-postgresql:hobby-dev HEROKU_POSTGRESQL_COBALT

尽管一切似乎都很好,但我的项目正在实时使用 SQLite 数据库。我肯定错过了什么。任何建议表示赞赏。如果需要,我可以展示更多。

最佳答案

Heroku 不提供 ON_HEROKU 环境变量。除非您自己设置,否则这将不起作用。

但是无论如何,您都不应该在设置中对生产数据库值进行硬编码。作为Heroku docs解释一下,这些值是由环境变量提供的,应该使用 dj-database-url 库自动将其转换为正确的设置。因此,您可以使用是否存在 DATABASE_URL env var 在硬编码 sqlite 设置和动态生产设置之间切换,或者甚至更好地设置 DATABASE_URL您的本地开发环境也指向您的 sqlite 文件。

关于Django:从本地开发推送时,SQLite 覆盖 heroku 上的 POSTGRESQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26094390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com