Django миграции не применяются к базе данных - PullRequest
2 голосов
/ 20 июня 2020

Немного предыстории: Мы используем контейнер docker для запуска нашего проекта django, и, поскольку над проектом работает несколько человек, мы поместили папку migrations в gitignore (правильно это или нет - отдельный вопрос), чтобы избежать конфликтов слияния.

Каждый раз makemigrations запускаются - всегда 001_initial.py, поскольку Docker копирует проект git, у которого нет migrations в этом. Команда migrate определяет, какие изменения применить к базе данных. Сейчас это становится обычной проблемой, когда иногда, когда появляется новое поле (или поле переименовано) - хотя эти изменения находятся в myapp\migrations\001_initial.py - после выполнения команды migrate django думает, что эти изменения уже в базе данных и он не применяет никаких миграций. Мы стираем базу данных и повторно выполняем миграции, что отлично подходит для разработки, но, очевидно, не работает для производства. Есть вопросы, связанные с этим, и людям рекомендуется вернуться к предыдущим миграциям, которые, кажется, сбрасываются и в некоторых случаях работают для нас - например:

python manage.py migrate myapp zero

Но это не работает всегда, если есть отношения в базе данных с полностью новыми таблицами (поэтому django жалуется, что таблица не существует) при попытке вернуться, и отчасти потому, что наши миграции в контейнере docker всегда начинаются с 001_initial.py.

Это * Ошибка 1030 * или мы не следуем какой-либо хорошей практике, отсюда и проблема? Мы думаем об удалении папки migrations из gitignore, что позволяет вернуться к более старым миграциям, однако мы не совсем уверены, решит ли это проблему, и, кроме того, проект django запускается в контейнере, поэтому migrations файлов внутри контейнер не привязан к git репо.

1 Ответ

0 голосов
/ 20 июня 2020

Я всегда перехожу через docker composer:

docker-compose run <django-container> python manage.py migrate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...