I want to revert my last migration (0157) by running its Migration.backwards()
method. Since I am reverting the migration in production server I want to run it automatically during code deployment. Deployment script executes these steps:
- Pull code changes
- Run migrations:
manage.py migrate <app>
- Refresh Apache to use newest code:
touch django.wsgi
If I could, I would create new migration file which would tell South to backward migrate to 0156:
migrations/0158_backward__migrate_to_0156.py
This commited migration would be deployed to production and executed during manage.py migrate <app>
command. In this case I wouldn't have to execute backward migration by hand, like suggested in these answers.
Lets say, I have created two data migrations, first for user's Payment, second for User model. I have implemented backwards() methods for both migrations in case I'd have to revert these data migrations. I've deployed these two migrations to production. And suddenly find out that Payment migration contains an error. I want to revert my two last data migrations as fast as possible. What is the fastest safe way to do it?
IMHO the safest path is
manage.py migrate <app>
(i.e. apply all existing migrations, i.e. up to 0156)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.