使用Zappa部署Django迁移AWS RDS出现InconsistentMigrationHistory错误如何处理
核心原因说明
你在本地执行的回滚命令只会修改本地数据库的迁移记录,不会改动云端AWS RDS的存储状态,因此本地操作后远程迁移依然会报错。
方案1:通过Zappa直接执行远程回滚操作
Zappa支持通过zappa manage指令直接在部署环境远程执行Django manage.py命令,直接操作RDS数据库,你可以按以下步骤操作:
- 依次执行远程回滚命令,注意将下方的
dev替换为你自己的Zappa部署环境名:
zappa manage dev "migrate admin zero" zappa manage dev "migrate auth zero" zappa manage dev "migrate contenttypes zero" zappa manage dev "migrate sessions zero"
- 回滚完成后重新执行远程迁移即可:
zappa manage dev migrate
方案2:手动处理RDS迁移记录(适用回滚命令执行失败场景)
如果执行上述回滚命令时也触发迁移历史冲突报错无法运行,可以手动操作RDS数据表修复:
- 到AWS RDS控制台的安全组配置中,给你的本地IP开通数据库端口(MySQL默认3306,PostgreSQL默认5432)的入站访问权限
- 用本地数据库客户端连接RDS实例
- 删除
django_migrations表中app字段为admin、auth、contenttypes、sessions、accounts的所有记录 - 手动删除上述几个应用对应的物理数据库表
- 重新执行
zappa manage dev migrate即可
方案3:重置RDS实例(适用新部署无业务数据场景)
如果你的RDS是刚创建的新实例,还没有存储业务数据,可以直接在AWS控制台重置RDS实例,待实例恢复完成后再重新执行迁移,操作成本更低。
内容的提问来源于stack exchange,提问作者EarlyCoder
相关产品推荐
相关产品推荐

