При создании миграций на бекенд не вносятся изменения в базу данных Posgresql

Рейтинг: 0Ответов: 1Опубликовано: 03.06.2023

У меня есть 2 приложения backend и db, которые находятся каждый в своём контейнере. Backend на Django, db на postgresql. При первичной сборке контейнеров и создании миграций, данные попадают в volume postgres_data/ в корневой папке сервера. При пересборке контейнера всё работает хорошо.

К примеру, я могу удалить все контейнеры, запустить их и снова база данных сохранится.

Но.

Если я вношу изменения со стороны бекенда, которые потребуют внесения миграций, то в db они не отобразятся. Я создаю test_fields в какой-либо модели Django, пушу на сервер изменения. В контейнере backend эти изменения отображаются, а вот в db новая колонка в таблице не появляется. docker-compose.yml

version: '3.3'
services:

  db:
    image: postgres:13.0-alpine
    ports:
      - 5432:5432
    volumes:
      - ./postgres_data:/var/lib/postgresql/data/:rw
    restart: always
    environment:
      HOST: 'db'
      PORT: 5432
      PGDATA: /var/lib/postgresql/data/
    env_file:
      - ./.1env
    networks:
      - nginx_net

  backend:
    image: hinek/astsmarttime:main
    restart: always
    ports:
      - "8000:8000"
    volumes:
      - ./resources:/app/resources/
    env_file:
      - ./.1env
    networks:
      - nginx_net
volumes:
  postgres_data:

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': env.str('POSTGRES_DB', 'POSTGRES_DB'),
        'USER': env.str('POSTGRES_USER', 'POSTGRES_USER'),
        'PASSWORD': env.str('POSTGRES_PASSWORD', 'POSTGRES_PASSWORD'),
        'HOST': env.str('HOST', 'HOST'),
        'PORT': env.int('PORT', 'PORT'),
    }

}

Помогает увидеть изменение только очистка папки postgres_data/, которая лежит на сервере и новое созданий миграций. Но тогда удаляется и вся база данных, что немного неудобно.

Ответы

▲ 0Принят

Проблема заключалась в том, что я добавил миграции в .gitignore.

При первичном создании миграции создавалась миграция с названием 0001_initial.py. Она заливалась в БД на сервер и всё работало нормально.

Но, когда я заливал обновления на сервер, они заливались без уже созданных миграций и файл снова создавался с таким же названием 0001_initial.py. Система видела файл с таким же названием в БД и не применяла изменения.