#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 было бы лучшим вариантом