Раздел релиза Heroku переопределяет процесс релиза

У меня есть следующий heroku.yml файл для развертывания контейнеров:

build:
  docker:
    release:
      dockerfile: Dockerfile
      target: release_image
    web: Dockerfile
  config:
    PROD: "True"
release:
  image: web
  command:
    - python manage.py collectstatic --noinput && python manage.py migrate users && python manage.py migrate
run:
  # web: python manage.py runserver 0.0.0.0:$PORT
  web: daphne config.asgi:application --port $PORT --bind 0.0.0.0 -v2
  celery:
    command:
      - celery --app=my_app worker --pool=prefork --concurrency=4 --statedb=celery/worker.state -l info
    image: web
  celery_beat:
    command:
      - celery --app=my_app beat -l info
    image: web

При развертывании я получаю следующее предупреждение, которое не имеет для меня никакого смысла:

Warning: You have declared both a release process type and a release section. Your release process type will be overridden.

Мой Dockerfile состоит из двух этапов, и я хочу сохранить только release_image этап:

FROM python:3.8 as builder
...
FROM python:3.8-slim as release_image
...

Согласно docs правильным способом выбора release_image является использование target секции внутри buildшага. Но там также ментируется, что я могу запускать свои миграции внутри release секции.

Так что же мне делать, чтобы избавиться от этого предупреждения? Я мог бы жить с этим, только если бы было ясно, что и мои migrations и target рассматриваются во время развертывания.Спасибо заранее.

Я хочу сохранить только release_image этап

Предполагая, что это верно и для вашего процесса web, обновите раздел build соответствующим образом:

build:
  docker:
    web:
      dockerfile: Dockerfile
      target: release_image
  config:
    PROD: "True"

Теперь у вас определен только один тип процесса, и он нацелен на этап сборки, который вы хотите использовать.

Поскольку вы можете запускать миграции из контейнера web, нет необходимости создавать целый контейнер только для процесса Heroku release. (А поскольку ваш раздел release использует образ web, процесс release, определенный в build, все равно не был бы ни для чего использован).

Вернуться на верх