使用Django channels_redis无法与Heroku Redis建立连接问题求助
问题原因
Heroku 上的 Redis 实例默认要求所有外部连接必须使用 SSL 加密,你当前的通道层配置没有开启 SSL 选项,未加密的连接请求会被服务端主动断开,就会抛出 Connection reset by peer 错误。
解决方案
按以下步骤修改配置即可修复:
- 第一步:修改
settings.py中的CHANNEL_LAYERS配置,新增 SSL 相关适配参数:
import os import ssl CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [os.environ.get('REDIS_URL', ("localhost", 6379))], # 生产环境自动开启SSL,本地开发环境不开启 "ssl": bool(os.environ.get('REDIS_URL')), "ssl_cert_reqs": ssl.CERT_NONE, }, }, }
- 第二步:确认依赖版本兼容,Python 3.7 环境下建议安装适配的
channels-redis版本:
在requirements.txt中加入channels-redis>=3.3.0,<4.0.0,重新部署更新依赖即可。 - 第三步:确认 Heroku 环境变量配置正确,进入 Heroku 应用控制台的「设置」页,查看 Config Vars 列表中是否存在
REDIS_URL变量,值应为rediss://开头的连接地址。
修改完成后重新部署即可正常连接 Heroku Redis。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

