South:如何在生产服务器中恢复迁移?

nie*_*kas 5 python migration django django-south dev-to-production

我想通过运行它的Migration.backwards()方法来恢复我的最后一次迁移 (0157) 。由于我正在恢复生产服务器中的迁移,因此我想在代码部署期间自动运行它。部署脚本执行以下步骤:

  1. 拉取代码更改
  2. 运行迁移: manage.py migrate <app>
  3. 刷新 Apache 以使用最新代码: touch django.wsgi

如果可以,我会创建新的迁移文件,告诉 South 向后迁移到 0156:

migrations/0158_backward__migrate_to_0156.py
Run Code Online (Sandbox Code Playgroud)

此提交的迁移将部署到生产并在manage.py migrate <app>命令期间执行。在这种情况下,我不必像这些答案中建议的那样手动执行向后迁移。

可以说,我创建了两个数据迁移,第一个用于用户的支付,第二个用于用户模型。我已经为这两种迁移实现了 reverses() 方法,以防我不得不恢复这些数据迁移。我已将这两个迁移部署到生产中。突然发现支付迁移包含错误。我想尽快恢复我最近的两次数据迁移。什么是最快安全的方法?

mir*_*ixx 3

由于我要在生产服务器中恢复迁移,因此我想在代码部署期间自动运行它。

恕我直言,最安全的路径是

  1. 运行manage.py migrate <app> (即应用所有现有迁移,即最多 0156)
  2. 撤消模型中的更改
  3. 跑步manage.py schemamigration <app> --auto

This will create a new migration 0157 that effectively reverts the previous migration 0156. Then simply apply the new migration by running manage.py migrate <app> again. As I understand, your code deployment will just do that.