RedI在使用NodeJS的CloudFoundry上失败

时间:2012-07-25 20:42:15

标签: node.js redis cloudfoundry

我正在制作一款使用Redis的应用。它在我运行Ubuntu 12.04的计算机上运行得很好,但是在CloudFoundry上它给了我一个错误。

以下是该应用的代码:

var
    http = require("http"),
    redis = require("redis"),
    cf = require("cloudfoundry");

cf.cloud;

if (cf.redis["myredisservice"]) {
    var rport = cf.redis["myredisservice"].credentials.port;
    var rhost = cf.redis["myredisservice"].credentials.hostname;
} else {
    var rport = 6379;
    var rhost = "127.0.0.1";
}


http.createServer(function(req, res) {
    var client = redis.createClient(rport, rhost);

    res.writeHead(200, {"Content-Type": "text/html"});

    client.on("error", function(error) {
        res.write("Error: " + error);
    });

    res.write("Setting key 1<br>");
    client.set("key1", "My 1st String!", redis.print);

    res.write("Getting key1<br>");
    client.get("key1", function(error, reply) {
        res.write("Results for key1<br>");
        res.write(reply);
        client.end();
        res.end();
    });
}).listen(cf.port || 3000);

在CloudFoundry上,当我运行这个应用程序时,它给了我这个输出:

  

设置键1

     

获取key1

     

错误:错误:就绪检查失败:不允许ERR操作

我可以使用CloudFoundry指定的端口和主机名确认它是否连接到Redis服务。

所以我认为它失败是因为其中一个命令。 :(

有谁能告诉我,为什么会发生这个错误?

感谢。 :d

1 个答案:

答案 0 :(得分:3)

您还需要对redis进行身份验证。试试这个:

var
    http = require("http"),
    redis = require("redis"),
    cf = require("cloudfoundry");

cf.cloud;

if (cf.redis["myredisservice"]) {
    var rport = cf.redis["myredisservice"].credentials.port;
    var rhost = cf.redis["myredisservice"].credentials.hostname;
    var rpass = cf.redis["myredisservice"].credentials.password;
} else {
    var rport = 6379;
    var rhost = "127.0.0.1";
}


http.createServer(function(req, res) {
    var client = redis.createClient(rport, rhost);
    client.auth(rpass);

    res.writeHead(200, {"Content-Type": "text/html"});

    client.on("error", function(error) {
        res.write("Error: " + error);
    });

    res.write("Setting key 1<br>");
    client.set("key1", "My 1st String!", redis.print);

    res.write("Getting key1<br>");
    client.get("key1", function(error, reply) {
        res.write("Results for key1<br>");
        res.write(reply);
        client.end();
        res.end();
    });
}).listen(cf.port || 3000);