Как обрабатывать миграции для сторонних приложений django в конвейерах развертывания?
Я использую стороннюю зависимость modeltranslation-lokalise
, которая требует, чтобы я запустил python manage.py makemigration
. Это создаст файл миграции, который будет находиться в каталоге пакета после создания, и поэтому не контролируется исходным кодом.
Для всех остальных файлов миграции я держу их под контролем исходного кода и хотел бы сделать то же самое для этих, поскольку это позволит нам отслеживать изменения в базе данных в используемых нами средах, гарантируя, что они могут быть легко воспроизведены и что операции не дублируются в одной и той же базе данных (например, если одна и та же операция существует в миграциях с разными именами).
Мой вопрос: Как эти сторонние миграции должны обрабатываться при сборке и развертывании на производстве (например, через Dockerfile в конвейере сборки?
).Мое предположение - найти способ надежно извлечь файлы миграции из пакета и добавить его в контроль исходного кода.
Альтернативой может быть: запуск makemigrations
внутри Dockerfile, который создает развернутый образ, однако это может привести к тому, что одна и та же миграция будет запущена дважды на базе данных, если имя этой миграции изменится (например, если в имени есть временная метка). Поэтому я думаю, что лучше избежать этого.
Примечание: этот вопрос похож, но он считает использование третьей части необязательным и, похоже, не рассматривает вышеуказанные альтернативы.
Я решаю это, используя ответ на этот вопрос:
Джанго миграционный файл в другом приложении?
Используя настройки MIGRATIONS_MODULE
, я смог указать django на создание миграций в моем каталоге исходников и, таким образом, зафиксировать их в системе управления исходниками.