我在Heroku上有一个正在运行的Django应用程序,并且迁移在发布时自动运行。尽管在大多数情况下,这可以正常工作,但有时在以下情况下会出现问题:
在这种情况下,manage.py migrate
将失败,因此Heroku将无法完成发行,也不会部署新代码。这意味着代码是旧版本,数据库处于“新旧之间的状态”。
在Heroku上发布命令失败的情况下,是否有一种简单的自动运行Django运行反向迁移的简单方法?
事务在这里无济于事,因为可能会有多个迁移(多个应用程序),并且Django在单独的事务中运行每个迁移。
答案 0 :(得分:0)
由于找不到任何现有的解决方案,因此我发布了为解决该问题而写的要点。
https://gist.github.com/pax0r/0591855e73b9892c28d3e3cdd15f4985
代码在运行迁移之前存储迁移的状态,并且在发生任何异常的情况下会恢复为该状态。它还会在migrate
步骤中检查所有迁移是否可逆。
它尚未经过良好的测试,但我将继续努力从中创建一个库,以方便其他人使用。