为什么我的 Celery 任务无法在 Heroku 上启动?

问题描述 投票:0回答:1

我目前在 Heroku 上部署了一个 dockerized Django 应用程序。我最近添加了带有

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)

任务.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 错误不会显示,但仅在几秒钟后显示,所以我不确定这是否是原因。

python django docker heroku redis
1个回答
0
投票

您的内存不足。

错误 R14(超出内存配额)

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

© www.soinside.com 2019 - 2024. All rights reserved.