У меня Django работает в контейнере Docker. CMD моего Docker-файла просто запускает скрипт launch.sh, в котором среди прочего есть следующие команды:
python manage.py makemigrations --no-input --verbosity 1
python manage.py migrate --no-input --verbosity 1
Итак, эти команды выполняют миграцию в моем проекте Django, а затем выполняют миграции (если таковые имеются) всякий раз, когда запускается мой контейнер. Это работает как предназначено для специфических миграций на уровне проекта .
Однако, неизбежно, только только выполняется миграция на уровне проекта, то есть миграция на уровне приложения никогда не выполняется и поэтому никогда не выполняется. Но Если я войду в контейнер (с помощью docker exec -it ... bash) и выполню те же самые команды миграции вручную, миграции на уровне приложения будут выполнены и выполнены.
Поиск в Google и многочисленные изменения в моем коде не дали никаких объяснений этому поведению или исправлению, так что я в замешательстве.
Есть идеи?
P.S. Вот мой проект и структура приложения:
/django/
project/
app/
static/
manage.py
Кроме того, я попытался выполнить один и тот же набор команд два раза подряд в моем сценарии, а также запустить один и тот же набор команд подряд, но с моим приложением, указанным в качестве параметра назначения, но эти попытки все же дали те же результаты: только выполняются миграции проекта, а не миграции приложений.
Как и просили, вот мой Dockerfile:
FROM python:3-slim
ENV PYTHONUNBUFFERED 1
ADD django-requirements.pip .
RUN pip install --upgrade pip && \
pip install --no-cache-dir -r django-requirements.pip
WORKDIR /
ADD launch.sh .
CMD ./launch.sh
Мой проект Django монтируется при запуске в / django, а мои CD-скрипты запускаются в / django перед запуском команд миграции.