问题描述
当我尝试将 AdonisJS 部署到数字海洋或 Azure 时,出现此错误
[ioredis] Unhandled error event: Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
我的 Adonis 应用需要 Redis 才能运行。我正在使用来自 Digital Ocean 的 Redis 实例。这是我的 Redis 生产配置。
prod: {
host: Env.get("REdis_HOST"),port: Env.get("REdis_PORT"),password: Env.get("REdis_PASSWORD"),db: 0,keyPrefix: ""
},
解决方法
如果您要将 AdonisJS 应用连接到受传输层安全性 (TLS) 保护的 Redis 实例,则需要将 tls
主机添加到您的配置中。
所以,你的 prod 配置应该是这样的
prod: {
host: Env.get("REDIS_HOST"),port: Env.get("REDIS_PORT"),password: Env.get("REDIS_PASSWORD"),db: 0,keyPrefix: "",tls: {
host: Env.get("REDIS_HOST"),},
,
作为我评论的后续 - 我的 docker 环境退化到我什至无法通过 redis-cli 连接到 vanilla dockerhub Redis 映像的地步。我通过删除所有容器、图像、卷、网络等来清理我的 docker 环境,然后重新启动我的 mac。重建它们后,这个问题对我来说就消失了。
我讨厌不知道“根本原因”但有一个理论。我一直在使用一些不同的 Redis 镜像,包括来自 dockerhub 的 vanilla 独立镜像和来自 https://github.com/Grokzen/docker-redis-cluster 的集群镜像。我正在调整后者的构建以添加身份验证。理论是,由于重复的构建和拆除,存在剩余的进程争夺端口。在调试 dockerfile
和 docker-entrypoint.sh
文件时,我可能已经不耐烦并多次停止我正在处理的容器。 :)
我知道这个答案与在 DO 或 Azure 上托管没有直接关系,但由于症状相同,可能某处存在网络冲突。