如何解决Redis可用于部署,不适用于docker和heroku的生产
我正在尝试开发一个Express api,它可以按预期在本地计算机上工作。我正在使用docker,但在docker上进行生产时,heroku redis无法正常工作
Dockerfile
FROM node:latest
workdir /usr/src/app
copY package*.json ./
RUN npm install
copY . .
EXPOSE 5000
CMD ["npm","start"]
docker.compose.yml文件
version: '3'
services:
mongo:
container_name: mongo
image: mongo
ports:
- '27017:27017'
redis:
container_name: redis
image: redis
app:
container_name: password-manager-docker
image: app
restart: always
build: .
ports:
- '80:5000'
links:
- mongo
- redis
environment:
MONGODB_URI: ${MONGODB_URI}
REdis_URL: ${REdis_URL}
clientID: ${clientID}
clientSecret : ${clientSecret}
PORT: ${PORT}
REdis_HOST: ${REdis_HOST}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
JWT_EXPIRE: ${JWT_EXPIRE}
REFRESH_TOKEN: ${REFRESH_TOKEN}
JWT_REFRESH_SECRET_KEY: ${JWT_REFRESH_SECRET_KEY}
JWT_REFRESH_EXPIRE: ${JWT_REFRESH_EXPIRE}
JWT_COOKIE: ${JWT_COOKIE}
SMTP_HOST: ${SMTP_HOST}
SMTP_PORT: ${SMTP_PORT}
SMTP_USER: ${SMTP_USER}
SMTP_PASS: ${SMTP_PASS}
const asyncRedis = require('async-redis');
//process.env.REdis_HOST's value is redis
const redisClient = asyncRedis.createClient({port:6379,host:process.env.REdis_HOST || "127.0.0.1"});
redisClient.on("connect",() => {
console.log(`Redis: ${host}:${port}`);
})
redisClient.on('error',function(err) {
// eslint-disable-next-line no-console
console.log(`[Redis] Error ${err}`);
});
heroku上的错误是“ [Redis]错误错误:Redis与127.0.0.1:6379的连接失败-连接ECONNREFUSED 127.0.0.1:6379”。它在Heroku上没有docker的情况下工作了,但是没有用。谢谢您的帮助
解决方法
-
安装redis
sudo apt-get install redis-server
-
运行命令以检查一切是否正常
sudo service redis-server status
如果收到消息redis-server is running
,它将被解析
未设置环境变量REDIS_HOST
-问题中已经有了答案,错误为:ECONNREFUSED 127.0.0.1:6379
主机地址来自您的if语句:{port:6379,host:process.env.REDIS_HOST || "127.0.0.1"}
如果未设置process.env.REDIS_HOST,则使用127.0.0.1作为主机地址。运行docker-compose时,您必须解析配置文件或通过-e KEY=VAL
进行配置,或者只编辑行REDIS_HOST: ${REDIS_HOST}
并将${REDIS_HOST}
替换为docker-com中的服务名称(redis)。 compose.yml文件或...,有很多可能性。如果您想知道redis容器的真实IP,只需检查docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <CONTAINER_ID/NAME>
我终于明白了。我将heroku中的redis插件从heroku redis更改为redis并更改了这一行
const redisClient = asyncRedis.createClient({port:6379,host:process.env.REDIS_HOST || "127.0.0.1"});
到
const redisClient = asyncRedis.createClient(process.env.REDISTOGO_URL);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。