簡體   English   中英

使用Node.js應用配置Redis

[英]Configuring redis with nodejs app

問題是我有一個簡單的應用程序,我希望將我遇到的問題redisToGo部署到heroku上,以便與我在heroku上的應用程序一起使用。 任何幫助將不勝感激。

這是我的app.js

var conf = {
    port: 8888,
    debug: false,
    dbPort: 6379,
    dbHost: '127.0.0.1',
    dbOptions: {},
    mainroom: 'MainRoom'
};


var express = require('express'),
    http = require('http'),
    socketio = require('socket.io'),
    events = require('events'),
    _ = require('underscore'),
    redis = require('redis'),
    sanitize = require('validator').sanitize;

var app = express(),
    server = http.createServer(app),
    io = socketio.listen(server);
    server.listen(conf.port);

app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.static(__dirname + '/static'));
 });

 var RedisStore = require('socket.io/lib/stores/redis'),
    pub = redis.createClient(conf.dbPort, conf.dbHost, conf.dbOptions),
    sub = redis.createClient(conf.dbPort, conf.dbHost, conf.dbOptions),
    db = redis.createClient(conf.dbPort, conf.dbHost, conf.dbOptions);
 io.set('store', new RedisStore({
    redisPub: pub,
    redisSub: sub,
    redisClient: db
 }));
 io.set('log level', 1);

我嘗試這樣做,但沒有運氣.....

var conf = {
    port: 8888,
    debug: false,
    dbPort: 9685,
    dbHost: 'redis://redistogo:<pass>@sole.redistogo.com:9685/',
    dbOptions: {},
    mainroom: 'MainRoom'
};

我不斷收到這個錯誤

 Error: Redis connection to redis://redistogo:<pass>@sole.redistogo.com:9685/ failed - connect ENOENT

我也嘗試過並使其連接,但現在它抱怨錯誤:錯誤:需要NOAUTH身份驗證。

var conf = {
   port: 8888,
   debug: false,
   dbPort: 9685,
   db: 'xxxxxxxx',
   dbPass: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
   dbHost: 'xxxx.redistogo.com',
   dbOptions: {no_ready_check: true},
   mainroom: 'MainRoom'
};

// Socket.io store configuration
var RedisStore = require('socket.io/lib/stores/redis'),
    pub = redis.createClient(conf.dbPort, conf.dbHost, conf.dbOptions, conf.dbPass),
    sub = redis.createClient(conf.dbPort, conf.dbHost, conf.dbOptions, conf.dbPass),
    db = redis.createClient(conf.dbPort, conf.dbHost, conf.dbOptions, conf.dbPass);
 io.set('store', new RedisStore({
    redisPub: pub,
    redisSub: sub,
    redisClient: db
 }));

使用節點dbOptions客戶端時,需要使用auth_pass上的auth_pass屬性聲明redis密碼:

var conf = {
   port: 8888,
   debug: false,
   dbPort: 9685,
   db: 'xxxxxxxx',
   dbHost: 'xxxx.redistogo.com',
   dbOptions: {
     auth_pass: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
     no_ready_check: true,
   },
   mainroom: 'MainRoom'
};

var db = redis.createClient(
  conf.dbPort,
  conf.dbHost,
  conf.dbOptions
);

如果看一下API,您會發現redis.createClient不接受密碼屬性:

redis.createClient(端口,主機選項)

auth_pass選項正是您要尋找的:

auth_pass默認為null。 默認情況下,客戶端將嘗試不使用身份驗證進行連接。 如果設置,客戶端將在連接上運行redis auth命令。

https://github.com/NodeRedis/node_redis/blob/master/README.md#overloading

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM