3

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

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

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

我的 server.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)

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

4

2 回答 2

11

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

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

令人困惑的是,当您不调用.auth()client 也不调用其他任何内容时,您将收到失败的就绪检查错误。

于 2013-04-07T08:29:45.560 回答
2

我通常在 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>);
于 2013-06-27T11:12:50.580 回答