Почему моя задача 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 (превышена квота памяти)