微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Redis可用于部署,不适用于docker和heroku的生产

如何解决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}

redis文件

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的情况下工作了,但是没有用。谢谢您的帮助

解决方法

  1. 安装redis

    sudo apt-get install redis-server

  2. 运行命令以检查一切是否正常

    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 举报,一经查实,本站将立刻删除。