Почему моя задача Celery не запускается на Heroku?
В настоящее время у меня есть приложение, развернутое на Heroku. Недавно я добавил celery с redis. Приложение отлично работает на моем устройстве, но когда я пытаюсь развернуть его на Heroku, все работает нормально, вплоть до вызова задачи Celery. Однако ничего не происходит, и я не получаю никаких журналов ошибок от Heroku. Вот мой код:
settings.py:
CELERY_BROKER_URL = env('REDIS_URL', default=env('CELERY_BROKER_URL'))#REDIS_URL #redis://localhost:6379
CELERY_RESULT_BACKEND = env('REDIS_URL', default=env('CELERY_BROKER_URL')) #'redis://redis:6379'
CELERY_CACHE_BACKEND = "default"
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
views.py:
task = transcribe_file_task.delay(file_path, audio_language, output_file_type, 'ai_transcribe_output', session_id)
celery.py:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
app = Celery("mysite")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
docker-compose.yml:
services:
web:
environment:
...
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
...
services:
celery:
environment:
...
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
heroku.yml:
setup:
addons:
- plan: heroku-postgresql
- plan: heroku-redis
build:
docker:
web: Dockerfile
celery: Dockerfile
release:
image: web
command:
- python manage.py collectstatic --noinput
run:
web: gunicorn mysite.wsgi
celery: celery -A mysite worker --loglevel=info
requirements.txt:
environs[django]==9.5.0
Я не использую Procfile.
Чтобы установить Redis на Heroku, я прочитал шаги в этом учебнике и просто перешел по url в строке 'Heroku Data for Redis' и установил его. Затем я зафиксировал установку на Github, запустил >heroku git:remote -a <app name>
и вытолкнул на Heroku с помощью >git push heroku main
.