【问题标题】:Redis failure on CloudFoundry with NodeJS使用 NodeJS 在 CloudFoundry 上的 Redis 失败
【发布时间】:2012-07-26 06:27:46
【问题描述】:

我正在制作一个使用 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

【问题讨论】:

    标签: node.js redis cloud-foundry


    【解决方案1】:

    您还需要对 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);
    

    【讨论】:

    • 嘿格伦,非常感谢您的回答。它完美无缺。 :D
    • 如果您可以使用 NodeJS 制作在 CloudFoundry 上使用 Redis 的指南,因为您目前只有使用 Ruby 的指南,这将对新手有所帮助。 :D
    • 很高兴为您提供帮助!下周查看blog.cloudfoundry.com(可能如下),了解有关 node.js 应用程序中服务自动配置的一些新闻!
    • Arjun,这是一个很好的建议,我会将我们的 node.js 开发人员倡导者指向该线程,以便他可以考虑执行该指南。
    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多