求助:Heroku上Django应用数据库表被删除,使用Cloudinary与SQLite
Heroku上Django应用SQLite数据库表丢失问题的解决办法
问题根源
Heroku的dyno采用临时文件系统,只要应用发生重启、dyno缩放或者休眠唤醒,本地存储的所有文件(包括SQLite的.db数据库文件)都会被重置为部署时的初始状态。Cloudinary存储静态文件的配置不影响数据库,因为SQLite是本地文件型数据库,完全不匹配Heroku的无状态运行环境。
可行解决方案
1. 切换到Heroku PostgreSQL(优先推荐)
- 通过Heroku控制台给应用添加PostgreSQL插件,或者用命令行操作:
heroku addons:create heroku-postgresql:hobby-dev - 修改Django项目的
settings.py,读取Heroku自动注入的数据库环境变量:import dj_database_url DATABASES = { 'default': dj_database_url.config(default='postgres://localhost/mydb') } - 确保
requirements.txt中包含dj-database-url依赖:dj-database-url>=0.5.0 - 执行数据库迁移,同步表结构到新数据库:
heroku run python manage.py migrate
2. 改用第三方远程数据库
如果不想用Heroku自带的PostgreSQL,也可以选择AWS RDS、Google Cloud SQL等远程数据库服务,只需在settings.py中将数据库配置指向远程数据库的连接地址,保证数据存储在持久化的远程服务器上。
关键提醒
- 生产环境下绝对不要在Heroku上使用SQLite,它的本地文件存储特性和Heroku的临时文件系统存在根本性冲突。
- 迁移数据库前务必备份现有数据(如果有),防止数据丢失。
内容的提问来源于stack exchange,提问作者UNK30WN
相关产品推荐
相关产品推荐

