无法连接到托管的redis:就绪检查失败:不允许ERR操作

时间:2013-04-06 08:33:11

标签: node.js redis

我尝试连接到我通过Nodejitsu配置的IrisCouch上的托管redis。

我认为是我服务器的相关部分.js:

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

我还没有在我的server.js中与客户进行任何互动,这就是为什么我认为它抛出&#很奇怪34;操作不被允许",因为基本上我唯一的操作是连接。我没有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)

关于可能出现什么问题的任何想法?

2 个答案:

答案 0 :(得分:8)

您需要在创建客户端后直接致电client.auth()

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

令人困惑的是,如果您不在.auth() 上拨打client,而在上没有其他任何内容,那么您的准备检查错误就会失败。

答案 1 :(得分:1)

我在CLI测试时经常遇到这个错误。

我想问题是在发出ready事件之前应该调用auth(如robertklep所述)。当您使用CLI进行测试时,客户端在var client = redis.createClient(port, host);行结束时按下回车键后立即开始连接,并且在您有机会发送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>);