質問

私はヘロクでヨードクを走らせようとしています。 node.jsとredisが必要です。確かに、私はこれらすべてのテクノロジーに慣れています。それにもかかわらず、私はそれを地元で実行することができました。ただし、Herokuに展開するときに次のエラーを受け取ります。

2011-12-01T11:55:18+00:00 app[web.1]: Redis To Go - port: 9030 hostname: dogfish.redistogo.com
2011-12-01T11:55:18+00:00 app[web.1]: Express server listening on port 9694
2011-12-01T11:55:19+00:00 heroku[web.1]: State changed from starting to up
2011-12-01T11:55:21+00:00 app[web.1]:         ^
2011-12-01T11:55:21+00:00 app[web.1]: Error: Redis connection to localhost:6379 failed - ECONNREFUSED, Connection refused
2011-12-01T11:55:21+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/redis/index.js:123:28)
2011-12-01T11:55:21+00:00 app[web.1]:     at Socket.emit (events.js:64:17)
2011-12-01T11:55:21+00:00 app[web.1]:     at Array.<anonymous> (net.js:828:27)
2011-12-01T11:55:21+00:00 app[web.1]:     at EventEmitter._tickCallback (node.js:126:26)
2011-12-01T11:55:23+00:00 heroku[web.1]: State changed from up to crashed

私が地元の交配で同様の警告を受けたのは、Redisが実行されていなかったときだけでした。私が言うことができることから、Redisアドオンは私のアプリと実行中に有効になっています:

$ heroku config --long
NODE_ENV      => production
PATH          => bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin
REDISTOGO_URL => redis://redistogo:52847221366cb677460c306e4f482c5b@dogfish.redistogo.com:9030/

私も試してみました 構成 提案. 。どちらも機能していないようです。

// redis connection in app.js
var db;
if (process.env.REDISTOGO_URL) {
   var rtg = require("url").parse(process.env.REDISTOGO_URL);
// tried this line as well... gave a different error on .connect();
// db = require('redis-url').connect(process.env.REDISTOGO_URL);
   db = redis.createClient(rtg.port, rtg.hostname);
   db.auth(rtg.auth.split(":")[1]);

   // debug
   sys.puts('Redis To Go - port: ' + rtg.port + ' hostname: ' + rtg.hostname);
} else {
   db = redis.createClient(config.redis.port, config.redis.host);
   db.auth(config.redis.password);
}

私の違いから 行くためにredis デバッグラインと エラー, 、これは構成の問題だと確信しています。しかし、それを修正する方法がわからない。どんな助けも大歓迎です。

役に立ちましたか?

解決 2

これは確かに、HerokuのRedisの構成に関係していました。 i/o docs app.jsで更新を必要とする追加の行がありました。

最終的に、私はグローバルを豚に袋に入れました config 生産(Heroku)環境を嗅いだ後、上部(〜line 60)のオブジェクト。

if (process.env.REDISTOGOURL) {
  // use production (Heroku) redis configuration
  // overwrite config to keep it simple
  var rtg = require(‘url’).parse(process.env.REDISTOGOURL);
  config.redis.port = rtg.port;
  config.redis.host = rtg.hostname;
  config.redis.password = rtg.auth.split(“:”)[1];
}

のブログ投稿を作成しました I/Oドキュメントのインストール、構成、展開 これには、I/Oドキュメントを実行するために必要な他の変更が含まれます。このプロジェクトに興味がある場合は、レビューすることをお勧めします。

ありがとう Jan Jongboomキルステン・ジョーンズ 私が始めるのを手伝ってくれた。さらに、プロジェクトはGitHubで更新され、Heroku構成を箱から出して含めると思います。しかし、私はまだそれをテストしていません。

他のヒント

この行によると:

2011-12-01T11:55:21+00:00 app[web.1]: Error: Redis connection to localhost:6379 failed - ECONNREFUSED, Connection refused

あなたは接続しようとしています localhost:6379, 、しかし、Redisサーバーは実行されています redis://redistogo:52847221366cb677460c306e4f482c5b@dogfish.redistogo.com:9030/. 。そのURLに手動で接続して、それが機能するかどうかを確認できますか?

私は実際に、Herokuに取り組んでいるIodocsを取得する方法についてのブログ投稿をしています。 RedisがHerokuでヨードクスで動作するようにするために必要な構成変更があります。

http://www.princesspolymath.com/princess_polymath/?p=489

必要なコードの変更は次のとおりです。「var db」の下に次のブロックを追加します。アプリへ:

if (process.env.REDISTOGO_URL) {
   var rtg   = require("url").parse(process.env.REDISTOGO_URL);
   db = require("redis").createClient(rtg.port, rtg.hostname);
   db.auth(rtg.auth.split(":")[1]);
} else {
   db = redis.createClient(config.redis.port, config.redis.host);
   db.auth(config.redis.password);
}

そして、これは、構成ファイルを読み取った後、[API構成]セクションで次のとおりです。

var app = module.exports = express.createServer();
var hostname, port, password
if (process.env.REDISTOGO_URL) {
    var rtg   = require("url").parse(process.env.REDISTOGO_URL);
    hostname = rtg.hostname;
    port = rtg.port;
    password = rtg.auth.split(":")[1];
} else {
    hostname = config.redis.host;
    port = config.redis.port;
    password = config.redis.password;
}

最近、よりクリーンな方法は Redis-url 構成を処理するモジュール。

私はレディス(Redis to Go Addon経由で)をセッションストアとしてExpressを使用していますが、Herokuでうまく機能します。

例:

const express           = require('express')

    , redis             = process.env.REDISTOGO_URL 
        ? require('redis-url').connect(process.env.REDISTOGO_URL) 
        : require('redis').createClient()

    , RedisStore        = require('connect-redis')(express)
    , sessionStore      = new RedisStore({ client: redis })
    , app               = express.createServer();

[...]

app.configure(function() {
    this
        .use(express.session({
            secret: 'mySecretHash', 
            store: sessionStore // Set redis as the sessionStore for Express
        }));
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top