Django应用部署至Heroku时的数据库预填充及选型相关问题
Heroku部署Django数据库填充问题解决方案
无需更换外部数据库的优先解决方案
这是Heroku部署Django的常见问题,先排查本地数据迁移到Heroku自带Postgres的流程问题即可解决,无需第一时间切换外部数据库:
- 先导出本地数据库的Django兼容fixture文件,避免导入时和系统默认表冲突,本地执行命令:
python manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude admin.logentry > data.json
导出的data.json放在项目根目录随代码一起部署即可。 - 要实现应用启动前完成数据填充,直接把数据导入逻辑加到Heroku的release阶段:在项目根目录的Procfile中新增一行配置:
release: python manage.py migrate && python manage.py loaddata data.json
Heroku的release阶段会在部署完成后、应用启动前执行,完全满足前置数据填充的要求。如果是单次导入不需要每次部署都执行,也可以手动通过Heroku CLI执行heroku run python manage.py loaddata data.json完成导入后再启动应用。 - 如果你的数据量超过100MB,fixture导入效率低,可以直接用Postgres原生备份恢复:本地导出备份文件后直接导入到Heroku Postgres实例,速度是fixture导入的3-5倍。
确需更换外部数据库的最优操作流程
如果后续你的数据量超过Heroku Postgres的配额限制,需要切换到AWS等平台的外部数据库,按以下流程操作即可:
- 优先选择托管式Postgres服务,和你现有Django项目的适配度最高,不需要修改任何模型层代码。
- 提前将所有数据从原数据库导出导入到新的外部数据库,完成数据校验后再修改Heroku的DATABASE_URL环境变量为外部数据库的连接地址,只要你之前的项目配置是读取环境变量获取数据库连接信息,不需要修改任何项目代码,重启应用即可完成切换。
- 切换完成后保留原数据库备份至少7天,确认数据无异常后再删除旧实例。
内容的提问来源于stack exchange,提问作者Braxton Goss
相关产品推荐
相关产品推荐

