0

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 サービスに接続されていることを確認できます。

したがって、これらのコマンドの1つが原因で失敗したと思います。:(

なぜこのエラーが発生するのか、誰か教えてもらえますか?

ありがとう。:D

4

1 に答える 1

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);
于 2012-07-25T22:27:46.147 に答える