运行 发布失败后在 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
步骤中是否所有迁移都是可逆的。
它还没有经过很好的测试,但我会努力从中创建一个库以供其他人更轻松地使用。
我在 Heroku 上有一个 运行ning Django 应用程序,发布时自动迁移 运行。虽然在大多数情况下这工作正常,但有时会出现问题:
- 给定版本中有多个迁移(它们可以在不同的应用程序中)
- 有些迁移会失败,但第一个不会
在这种情况下 manage.py migrate
将失败,因此 Heroku 将不会完成发布并且不会部署新代码。这意味着代码处于旧版本并且数据库处于状态 "somewhere between old and new".
有没有一种简单的方法可以自动运行 Django 运行 反向迁移以防 Heroku 上的发布命令失败?
事务在这里无济于事,因为可能有不止一个迁移(多个应用程序)和 Django 运行 每个迁移都在单独的事务中。
因为我找不到任何现有的解决方案,所以我发布了一个我写的要点来解决这个问题。
https://gist.github.com/pax0r/0591855e73b9892c28d3e3cdd15f4985
代码存储 运行 迁移之前的迁移状态,如果出现任何异常,则恢复到此状态。它还检查在 migrate
步骤中是否所有迁移都是可逆的。
它还没有经过很好的测试,但我会努力从中创建一个库以供其他人更轻松地使用。