连接宿主redis失败:Ready check failed:不允许ERR操作



我正试图连接到我通过Nodejitsu提供的IrisCouch上的托管redis。

我认为是我的server.js的相关部分:

var redisUrl = require('url').parse(config.REDIS_CONNECTION_URI);
var client = require('redis').createClient(redisUrl.port, redisUrl.hostname);

我没有任何交互与客户端在我的服务器.js尚未,这就是为什么我认为这是奇怪的,它抛出"不允许的操作",因为基本上我做的唯一的操作是连接。我没有redis.conf文件,我相信我不需要一个,因为我自己不托管redis实例。

日志:

 Express server listening on port 3000
/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:504
                throw callback_err;
                      ^
Error: Ready check failed: ERR operation not permitted
    at RedisClient.on_info_cmd (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:317:35)
    at Command.RedisClient.ready_check.send_anyway [as callback] (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:365:14)
    at RedisClient.return_error (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:500:25)
    at ReplyParser.RedisClient.init_parser (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:260:14)
    at ReplyParser.EventEmitter.emit (events.js:96:17)
    at ReplyParser.send_error (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/lib/parser/javascript.js:293:10)
    at ReplyParser.execute (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/lib/parser/javascript.js:176:22)
    at RedisClient.on_data (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:476:27)
    at Socket.<anonymous> (/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:79:14)
    at Socket.EventEmitter.emit (events.js:96:17)

你知道是什么问题吗?

创建客户端后需要直接调用client.auth():

var client = require('redis').createClient(redisUrl.port, redisUrl.hostname);
client.auth(PASSWORD);

令人困惑的是,当你不调用.auth()client ,但没有其他,你会得到一个失败的准备检查错误。

我在cli测试时经常出现这个错误。

我猜问题是对auth的调用应该在ready事件发出之前进行(正如robertklep提到的)。当您使用CLI进行测试时,一旦您在var client = redis.createClient(port, host);行末尾按enter键,客户端就开始连接,并且可能在您甚至有机会发送AUTH命令之前发送某种IDLE命令,这会触发ERR operation not permitted错误。

tl;博士

在cli测试时,用下面的代码创建你的redis客户端:

var redis = require('redis');
function createClient(port, host, pass) {
    var client = redis.createClient(port, host);
    client.auth(pass);
    return client;
}
var r = createClient(<MYPORT>, <MYHOST>, <MYPASS>);

最新更新