You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Django项目对接Heroku Redis出现Celery连接10054报错如何解决?

问题原因

这个10054错误是Redis服务端主动断开了Celery的连接请求,核心触发原因有以下几个:

  • Heroku Redis 6及以上版本默认强制要求TLS加密连接,你当前配置的Redis URL未携带SSL相关参数,不符合服务端连接要求,被直接断开
  • 你贴出的settings.py配置中,CELERY_RESULT_BACKEND 等配置存在多余前置缩进,会导致Django无法正确读取Celery配置
  • 硬编码Redis连接地址,未使用Heroku自动注入的REDIS_URL环境变量,可能存在地址过期、配置不匹配问题
  • 缺少Redis SSL依赖,或Celery、Redis SDK版本不兼容
解决方案
  1. 修正Celery SSL配置,替换settings.py中原有的Celery相关配置为以下内容:
import os
# Celery Broker - Redis
CELERY_BROKER_URL = os.getenv('REDIS_URL')
CELERY_BROKER_USE_SSL = {'ssl_cert_reqs': None}
CELERY_RESULT_BACKEND = os.getenv('REDIS_URL')
CELERY_REDIS_BACKEND_USE_SSL = {'ssl_cert_reqs': None}
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

注意所有配置项顶格编写,不要加多余缩进。直接读取Heroku的REDIS_URL环境变量,不要硬编码连接地址。

  1. 安装匹配的依赖包,执行以下命令更新依赖:
pip install redis>=4.0.0 celery>=5.2.0 django-celery-beat

如果需要生成requirements.txt,记得把以上依赖写入文件同步到Heroku。

  1. 验证Redis连接可用性,部署到Heroku后执行以下命令测试连通性:
heroku run python -c "import os, redis; r = redis.from_url(os.getenv('REDIS_URL'), ssl_cert_reqs=None); print(r.ping())"

返回True则说明Redis连接正常。

  1. 本地测试建议使用本地Redis服务,避免Heroku Redis公网访问限制导致的连接问题。若需要本地连接Heroku Redis,保持上述SSL配置即可。

  2. 如果你要实现指定日期触发邮件的定时功能,还需要配置django-celery-beat启动Beat进程,在Heroku的Procfile中添加对应的进程配置:

web: gunicorn incFleet.wsgi
worker: celery -A incFleet worker --loglevel=info
beat: celery -A incFleet beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler

然后在Django后台配置对应的定时任务规则即可。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:27:05