heroku.yml 如何有两个工人?

How to have two workers for heroku.yml?

我有以下heroku.yml。 'containers' 共享相同的 Dockerfile:

build:
  docker:
    web: Dockerfile
    celery: Dockerfile
    celery-beat: Dockerfile
release:
  image: web
  command:
    - python manage.py migrate users && python manage.py migrate
run:
  web: python manage.py runserver 0.0.0.0:$PORT
  celery: celery --app=my_app worker --pool=prefork --concurrency=4 --statedb=celery/worker.state -l info
  celery-beat: celery --app=my_app beat -l info

本来打算三个容器,结果Heroku只接受一个web,另一个应该是workers.

那么我要在 heroku.yml 处修改什么以使 celerycelery-beat 容器成为 worker

更新

我已将 heroku.yml 更改为以下内容,但 Heroku 仅保留最后一个工人(即芹菜节拍)而忽略第一个工人:

build:
  docker:
    web: Dockerfile
release:
  image: web
  command:
    - python manage.py migrate users && python manage.py migrate
run:
  web: python manage.py runserver 0.0.0.0:$PORT
  worker:
    command:
      - celery --app=my_app worker --pool=prefork --concurrency=4 --statedb=celery/worker.state -l info
    image: web
  worker:
    command:
      - celery --app=my_app beat -l info
    image: web

我错过了什么?

The name worker isn't really important:

No process types besides web and release have special properties

所以给他们不同的名字:

run:
  web: python manage.py runserver 0.0.0.0:$PORT
  celery_worker:
    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

缩放这些进程时,使用名称 celery_workercelery_beat

一个更好的选择是合并芹菜工人并在单个工人/命令中击败:(只能在Linux os)

run:
  web: python manage.py runserver 0.0.0.0:$PORT
  celery_worker:
    command:
      - celery --app=my_app worker --pool=prefork --concurrency=4 --statedb=celery/worker.state -l info --beat -l info
    image: web