每次我在Heroku上对生产中的数据库进行更改,然后执行一次推送,数据库就会重置为本地计算机上的任何内容。我尝试将db.sqlite3
和__pycache__
添加到.gitignore
,但这是行不通的。
有人知道该问题怎么办吗?
更新(将设置更改为):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.path.join(BASE_DIR, 'thesite'),
'USER': 'tom',
'PASSWORD': '!'
}
}
并添加
import os
import psycopg2
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
import dj_database_url
DATABASES['default'] = dj_database_url.config()
答案 0 :(得分:1)
Heroku's filesystem is ephemeral:下次重新启动测功机时,您对文件所做的任何更改都会丢失,happens frequently(每天至少一次)。由于SQLite是基于文件的数据库,因此与Heroku不兼容。
您可以改用客户端服务器数据库。 Heroku自己的PostgreSQL add-on应该已经为您设置了,但是您可以根据需要使用several others中的任何一个。
dj-database-url
可以为您简化此操作:它使您可以从DATABASE_URL
环境变量设置数据库配置,该变量应该已经由Heroku Postgres进行了设置。
下面是一个示例,说明如何使用dj-database-url
来使用DATABASE_URL
环境变量(如果不存在)以及如何退回到另一个数据库:
DATABASES['default'] = dj_database_url.config(default='sqlite://db.sqlite3')
我已经展示了一个可以追溯到SQLite的示例,但实际上,我 strongy 建议在所有环境中使用相同的数据库引擎。 Django的ORM可帮助“平衡”不同的数据库引擎,但仍然存在差异。您不希望自己的代码在本地使用SQLite工作,但在PostgreSQL中无法生产。