我有一个使用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的插件,但我得到了相同的错误消息
答案 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,
};
};