【问题标题】:How to fix the ECONNRESET ioredis error in Adonisjs during deployment如何在部署期间修复 Adonisjs 中的 ECONNRESET ioredis 错误
【发布时间】:2021-04-15 03:40:13
【问题描述】:

当我尝试将 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: ""
  },

【问题讨论】:

  • 我在本地 docker 实例中也看到了这一点。在没有 --requirepass 选项的情况下启动 Redis 时似乎不会发生。你知道你的 redis-server 启动选项或 redis.conf 设置吗?很想比较一下笔记。

标签: node.js redis adonis.js ioredis


【解决方案1】:

如果您要将 AdonisJS 应用连接到受传输层安全 (TLS) 保护的 Redis 实例,则需要将 tls 主机添加到您的配置中。

所以,你的产品配置应该是这样的

  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"),
    },
  },

【讨论】:

    【解决方案2】:

    作为我评论的后续行动 - 我的 docker 环境降级到我什至无法通过 redis-cli 连接到 vanilla dockerhub Redis 映像的地步。我通过删除所有容器、图像、卷、网络等来清理我的 docker 环境,然后重新启动我的 mac。重建它们后,这个问题对我来说就消失了。

    我讨厌不知道“根本原因”,但有一个理论。我一直在玩一些不同的 Redis 镜像,包括来自 dockerhub 的 vanilla 独立镜像和来自 https://github.com/Grokzen/docker-redis-cluster 的集群镜像。我正在调整后者的构建以添加身份验证。理论是,由于反复的建造和拆除,港口存在残余进程。在调试dockerfiledocker-entrypoint.sh 文件时,我可能一直不耐烦并且多次硬停止我正在处理的容器。 :)

    我知道这个答案与 DO 或 Azure 上的托管没有直接关系,但由于症状相同,因此某处可能存在网络冲突。

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2012-07-15
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      相关资源
      最近更新 更多