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

Heroku部署Django时Celery连接Redis报Connection reset by peer错误

问题排查与解决步骤

该Connection reset by peer报错本质是Celery和Redis服务的连接被对端主动断开,结合Heroku平台特性,按以下顺序排查即可解决:

1. 修正Redis连接协议与地址配置

这是Heroku环境下最常见的触发原因:

  • Heroku官方提供的Redis服务默认强制走TLS加密连接,连接前缀为rediss://,你当前配置的redis://是非加密协议,会直接被服务端拒绝连接
  • 不要硬编码Redis连接地址,直接读取Heroku注入的环境变量,避免地址更新后配置失效,修改settings.py配置:
import os
CELERY_BROKER_URL = os.environ.get('REDIS_URL', 'redis://localhost:6379/0')
CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL', 'redis://localhost:6379/0')
  • 配合TLS连接补充SSL校验配置(Heroku Redis不需要客户端校验证书):
CELERY_BROKER_USE_SSL = {'ssl_cert_reqs': None}
CELERY_REDIS_BACKEND_USE_SSL = {'ssl_cert_reqs': None}

2. 修正已知配置笔误

你当前settings.py中的CELERY_TASK_SELERLIZER为拼写错误,正确应为CELERY_TASK_SERIALIZER,虽然该错误不会直接触发连接报错,但会导致后续任务序列化异常,建议提前修正。

3. 适配Heroku环境调整Celery连接参数

Heroku Redis会主动断开空闲过久的连接,且有严格的连接数限制,补充以下配置规避连接被主动回收的问题:

# 关闭broker连接池,适配Heroku短连接场景,避免连接泄漏
BROKER_POOL_LIMIT = 0
# 连接超时设置,避免长时间无响应导致断开
BROKER_CONNECTION_TIMEOUT = 30
# 启动阶段开启连接自动重试
BROKER_CONNECTION_RETRY_ON_STARTUP = True
# 配置心跳包,避免服务端判定连接空闲主动断开
CELERY_BROKER_HEARTBEAT = 60

4. 验证基础服务与启动配置

  • 登录Heroku控制台查看绑定的Redis插件状态,确认无欠费、资源超限、服务异常的提示
  • 可以通过Heroku CLI执行heroku redis:cli测试Redis连接,若能正常进入交互页则说明Redis服务本身正常,问题出在应用侧配置
  • 确认Procfile中Celery启动命令正确,不要将worker和beat放在同一进程启动,示例配置:
web: gunicorn NewsApi.wsgi --log-file -
worker: celery -A NewsApi worker --loglevel=info --concurrency=2
beat: celery -A NewsApi beat --loglevel=info

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:39:01