Heroku 发布部分覆盖发布过程

Heroku release section overrides release process

我有以下 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 的正确方法是使用 build 步骤中的 target 部分。 但它也 mentions 我可以 运行 我在 release 部分中的迁移。

那么我应该怎么做才能摆脱这个警告? 只有当我的 migrationstarget 正在 deploy.Thanks 期间提前考虑!

I want to keep only the release_image stage

假设您的 web 流程也是如此,请相应地更新您的 build 部分:

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

现在您只定义了一种流程类型,它针对您要使用的构建阶段。

由于您可以 运行 从 web 容器进行迁移,因此无需为 Heroku release 进程构建整个容器。 (并且由于您的 release 部分使用 web 图像,因此 build 中定义的 release 过程无论如何都不会用于任何使用。)