将Nodejs应用程序连接到Heroku上的Redis时出错

时间:2020-04-09 03:46:07

标签: node.js heroku redis

我有一个使用Redis来处理会话的Nodejs应用程序。我正在使用connect-redis npm软件包。现在,我将相同的Nodejs应用程序部署到了Heroku,但是我不知道是否有办法让Redis服务器与Heroku中的Nodejs应用程序一起使用。

我在heroku logs --tail上遇到以下错误

2020-04-09T03:40:31.880266 + 00:00 app [web.1]:抛出错误; //未处理 “错误”事件2020-04-09T03:40:31.880267 + 00:00 app [web.1]:^ 2020-04-09T03:40:31.880267 + 00:00 app [web.1]: 2020-04-09T03:40:31.880267 + 00:00 app [web.1]:错误:Redis连接 到127.0.0.1:6379失败-连接ECONNREFUSED 127.0.0.1:6379 2020-04-09T03:40:31.880268 + 00:00 app [web.1]:在 TCPConnectWrap.afterConnect [完成时](net.js:1137:16) 2020-04-09T03:40:31.880268 + 00:00 app [web.1]:发生了“错误”事件 RedisClient实例位于:2020-04-09T03:40:31.880268 + 00:00 app [web.1]: 在RedisClient.on_error(/app/node_modules/redis/index.js:341:14) 2020-04-09T03:40:31.880269 + 00:00 app [web.1]:在套接字上。 (/app/node_modules/redis/index.js:222:14) 2020-04-09T03:40:31.880269 + 00:00 app [web.1]:在Socket.emit (events.js:311:20)2020-04-09T03:40:31.880269 + 00:00 app [web.1]:at 酋长(内部/流/destroy.js:92:8) 2020-04-09T03:40:31.880270 + 00:00 app [web.1]:在emitErrorAndCloseNT (内部/流/destroy.js:60:3)2020-04-09T03:40:31.880270 + 00:00 app [web.1]:在processTicksAndRejections (internal / process / task_queues.js:84:21){ 2020-04-09T03:40:31.880278 + 00:00 app [web.1]:errno:'ECONNREFUSED', 2020-04-09T03:40:31.880279 + 00:00 app [web.1]:代码:'ECONNREFUSED', 2020-04-09T03:40:31.880279 + 00:00 app [web.1]:syscall:'connect', 2020-04-09T03:40:31.880279 + 00:00 app [web.1]:地址:'127.0.0.1', 2020-04-09T03:40:31.880280 + 00:00 app [web.1]:端口:6379 2020-04-09T03:40:31.880280 + 00:00 app [web.1]:}

我还添加了一个名为Heroku Redis的插件,但我得到了相同的错误消息

2 个答案:

答案 0 :(得分:1)

在Heroku上,您的REDIS服务器在127.0.0.1上不再可用

我建议找出Heroku上Redis服务器的IP地址。

并更改Redis服务器的Node.JS配置。

答案 1 :(得分:1)

在三天后寻找该错误的答案之后,我将分享对我有用的东西,得到愿景。 我正在使用此Heroku Redis插件,您可以通过heroku-cli或直接在heroku网站上的仪表板上安装: 资源>单击按钮“查找更多加载项”并搜索Heroku Redis

通过heroku-cli:

heroku插件:创建heroku-redis:hobby-dev

  • 创建BD Redis在heroku页面上获取变量数据:

    资源>附加组件> Heroku Redis>设置

  • 在heroku中创建并配置为Redis环境变量:

REDIS_PASSWORD-提供由heroku生成的密码:

REDIS_URL-提供由heroku创建的主机

REDIS_PORT-提供由heroku生成的端口

应用程序中Redis配置文件的内容:

redis.js

if (process.env.NODE_ENV === 'development') {
  export default {
   host: process.env.REDIS_URL,
   port: process.env.REDIS_PORT,
 };
} else {
  export default {
   host: process.env.REDIS_URL,
   port: process.env.REDIS_PORT,
   password: process.env.REDIS_PASSWORD,
  };
};

参考:https://devcenter.heroku.com/articles