Почему моя задача Celery не запускается на Heroku?

В настоящее время у меня есть докеризованное приложение Django, развернутое на Heroku. Недавно я добавил Celery с помощью redis. Приложение отлично работает на моем устройстве, но когда я пытаюсь развернуть его на Heroku, все работает нормально до тех пор, пока не запускается задача Celery. Однако ничего не произошло, и я не получаю никаких журналов ошибок от Heroku. Я использую celery-redis и следую их инструкциям по настройке, но моя задача по-прежнему не запускается при развертывании на Heroku.

Вот мой код:

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

views.py:

from celery.result import AsyncResult
task = transcribe_file_task.delay(file_path, audio_language, output_file_type, 'ai_transcribe_output', session_id)

task.py:

from celery import Celery
app = Celery('transcribe')

@app.task
def transcribe_file_task(path, audio_language, output_file_type, dest_dir, session_id):
    print(str("TASK: "+session_id))

    #rest of code

    return output_file

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()

Я убедился, что мои CELERY_BROKER_URL и CELERY_RESULT_BACKEND получают правильный REDIS_URL из переменных окружения, заставив его распечатать значение перед запуском задачи. Поэтому я знаю, что проблема не в этом. Единственные журналы ошибок, которые у меня есть, это ошибки R14:

2024-09-29T16:11:03.658186+00:00 heroku[router]: at=info method=POST path="/transcribe/init-transcription/6a41ee9a-1489-4858-a142-693767b3d0da/" host=myst...5f5.herokuapp.com request_id=c6c90dbe-1165-408a-85dd-9996d8ca82c1 fwd="69.160.121.69" dyno=web.1 connect=0ms service=6086ms status=200 bytes=402 protocol=https
2024-09-29T16:11:14.125891+00:00 heroku[celery.1]: Process running mem=788M(154.0%)
2024-09-29T16:11:14.130305+00:00 heroku[celery.1]: Error R14 (Memory quota exceeded)
2024-09-29T16:11:32.783420+00:00 heroku[celery.1]: Process running mem=788M(154.0%)
2024-09-29T16:11:32.786173+00:00 heroku[celery.1]: Error R14 (Memory quota exceeded)
2024-09-29T16:11:52.871883+00:00 heroku[celery.1]: Process running mem=788M(154.0%)
2024-09-29T16:11:52.873514+00:00 heroku[celery.1]: Error R14 (Memory quota exceeded)
2024-09-29T16:11:13.000000+00:00 app[heroku-redis]: source=REDIS addon=redis-cyl...6136 sample#active-connections=6 sample#max-connections=18 sample#connection-percentage-used=0.33333 sample#load-avg-1m=7.945 sample#load-avg-5m=6.65 sample#load-avg-15m=6.685 sample#read-iops=0 sample#write-iops=0.35443 sample#max-iops=3000 sample#iops-percentage-used=0.00012 sample#memory-total=16070676kB sample#memory-free=6724104kB sample#memory-percentage-used=0.58159 sample#memory-cached=5657108kB sample#memory-redis=1097464bytes sample#hit-rate=0.46878 sample#evicted-keys=0

Однако ошибка R14 появляется не в тот момент, когда веб-сайт пытается инициировать задачу, а только через несколько секунд после этого, поэтому я не уверен, что причина именно в этом.

У вас закончилась оперативная память.

Ошибка R14 (превышена квота памяти)

https://docs.celeryq.dev/en/main/userguide/optimizing.html

Вернуться на верх