运行 发布失败后在 Heroku 上反向迁移 Django

Run reverse Django migration on Heroku after release failure

我在 Heroku 上有一个 运行ning Django 应用程序,发布时自动迁移 运行。虽然在大多数情况下这工作正常,但有时会出现问题:

在这种情况下 manage.py migrate 将失败,因此 Heroku 将不会完成发布并且不会部署新代码。这意味着代码处于旧版本并且数据库处于状态 "somewhere between old and new".

有没有一种简单的方法可以自动运行 Django 运行 反向迁移以防 Heroku 上的发布命令失败?

事务在这里无济于事,因为可能有不止一个迁移(多个应用程序)和 Django 运行 每个迁移都在单独的事务中。

因为我找不到任何现有的解决方案,所以我发布了一个我写的要点来解决这个问题。

https://gist.github.com/pax0r/0591855e73b9892c28d3e3cdd15f4985

代码存储 运行 迁移之前的迁移状态,如果出现任何异常,则恢复到此状态。它还检查在 migrate 步骤中是否所有迁移都是可逆的。

它还没有经过很好的测试,但我会努力从中创建一个库以供其他人更轻松地使用。