Как иметь два рабочих для heroku.yml?
У меня есть следующее heroku.yml. У "контейнеров" одинаковые 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, чтобы celery и celery-beat были контейнерами worker?
Название worker не имеет особого значения:
Ни один тип процесса, кроме
webиrelease, не имеет специальных свойств
Так что просто дайте им разные имена:
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_worker и celery_beat.
Лучший вариант - объединить celery worker и beat в single worker / command : (можно сделать только на 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