Django потерял файл миграции

#django #postgresql #django-migrations

Вопрос:

У меня есть приложение django, подключенное к базе данных postgresql (экземпляр RDS, работающий на AWS).

Недавно я добавил новые поля в таблицы своей базы данных, но забыл запустить makemigrations локально и отправил код на сервер. Сервер вышел из строя, так как изменения не были применены, и чтобы быстро устранить проблему, я решил запустить makemigrations migrate приложение непосредственно в контейнере docker, я думал, что оно будет генерировать файлы миграции, но, к сожалению, этого не произошло. Миграция была применена на уровне базы данных, но файл переноса изменений отсутствует.

При запуске python manage.py showmigrations в контейнере он выводит:

 redirect
 [X] 0001_initial
 [X] 0002_redirect_clicks
 [X] 0003_redirect_name
 

Но в базе данных запуск SELECT * FROM django_migrations; говорит о том, что есть еще одна миграция:

 103 | redirect           | 0004_auto_20210707_2039     | 2021-07-07 14:39:19.058233 00
 

Что бы вы посоветовали? Я подумал о том, чтобы запустить makemigrations локально, сгенерировать файл и отправить его в vcs, а на сервере применить изменения с помощью migrate --fake .

Я не знаю, что именно это делает, и я слишком боюсь делать это без руководства, любая помощь была бы признательна

Комментарии:

1. Кто-то, должно быть, починил его для вас, если там есть 0004 🙂 Вы могли бы просто попросить их зафиксировать это в VCS

2. Да, этот волосатый. Вы единственный, кто работает над этим, или кто-то другой?

3. @AaronCloud @bdbd Да, я один работаю над этим. Проблема в том , что я запустил makemigrations и применил их с помощью docker-compose run , это означает, что изменения были применены к удаленной базе данных, однако файловая система каким-то образом не была изменена

4. идк, братан. Ммм, я не знаю, повредит ли местная миграция? Тогда вы могли бы подтолкнуть эти изменения?? Но я никогда не был в такой ситуации, вы живете и работаете?

5. @AaronCloud Да, все работает нормально, но это до тех пор, пока я не внесу некоторые новые изменения в базу данных D:

Ответ №1:

Текущее решение (не идеальное):

Я сгенерировал файл миграции локально, толкнул его в VCS, а на удаленном сервере, мне пришлось отменить все миграции для приложения, используя python manage.py migrate <app_name> zero (это вызвало потери данных для таблиц баз данных в приложении, так что подумайте дважды, прежде чем делать это), а затем применили их снова, но теперь с миграцией файл, созданный в 1-ый шаг. Все вернулось на круги своя, но, очевидно, есть лучшее решение

Комментарии:

1. вероятно, использование —fake было бы лучшим вариантом