【问题标题】:Heroku release section overrides release processHeroku 发布部分覆盖发布过程
【发布时间】:2022-02-03 14:47:14
【问题描述】:

我有以下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 时,我才能忍受它。提前致谢!

【问题讨论】:

    标签: django docker heroku yaml docker-container


    【解决方案1】:

    我只想保留release_image 阶段

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

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

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

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

    【讨论】:

    • 谢谢!您的建议确实消除了警告并加快了进程!
    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多