Frage

Ich versuche Iodocs auf Heroku zum Laufen zu bringen. Es erfordert Node.js und Redis. Zugegeben, ich bin neu in all diesen Technologien. Trotzdem habe ich es geschafft, es lokal zum Laufen zu bringen. Ich erhalte jedoch den folgenden Fehler beim Bereitstellen für 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

Das einzige Mal, dass ich eine ähnliche Warnung in meiner lokalen Paarung erhielt, war, als Redis nicht lief. Nach dem, was ich sagen kann, ist das Redis-Add-On für meine App aktiviert und läuft:

$ 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/

Ich habe auch einige ausprobiert Aufbau Anregungen. Weder scheint zu funktionieren.

// 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);
}

Aus dem Unterschied in meinem Redis zu gehen Debugg Line und Fehler, Ich bin mir sicher, dass dies ein Konfigurationsproblem ist. Aber weiß nicht, wie ich es beheben soll. Jede Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung 2

Dies hatte in der Tat mit der Konfiguration für Redis auf Heroku zu tun. Es gab zusätzliche Zeilen, die Aktualisierungen in E/A -Dokumenten App.js.

Am Ende habe ich die Globale gepackt config Objekt oben (~ Linie 60), nachdem sie die Produktion (Heroku) umgeschnüffelt hat.

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];
}

Ich habe einen Blog -Beitrag für erstellt Installieren, Konfigurieren und Bereitstellen von E/A -Dokumenten Dies schließt dies sowie andere Änderungen ein, die erforderlich waren, um E/A -Dokumente auszuführen. Ich empfehle Ihnen, es zu überprüfen, wenn Sie an diesem Projekt interessiert sind.

Dank an Jan Jongboom und Kirsten Jones für den Hilf mir, loszulegen. Darüber hinaus glaube ich, dass das Projekt auf Github aktualisiert wurde, um die Heroku -Konfiguration in den Box zu enthalten. Ich habe es jedoch noch nicht getestet.

Andere Tipps

Nach dieser Zeile:

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

Sie versuchen, eine Verbindung herzustellen localhost:6379, aber der Redis -Server läuft bei redis://redistogo:52847221366cb677460c306e4f482c5b@dogfish.redistogo.com:9030/. Können Sie versuchen, manuell mit dieser URL zu verbinden und zu sehen, ob dies funktioniert?

Ich habe tatsächlich einen Blog -Beitrag darüber, wie man Iodocs auf Heroku zum Arbeiten bringt. Es hat die Konfigurationsänderungen, die erforderlich sind, damit die Redis mit Iodocs auf Heroku arbeiten.

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

Hier ist die erforderlichen Codeänderungen: Fügen Sie den folgenden Block unter "var db" hinzu; zu App.

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);
}

Und dann im Abschnitt "API -Konfiguration" nach Lesen der Konfigurationsdatei:

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;
}

Vor kurzem wäre ein sauberer Weg, die zu verwenden Redis-url Modul mit der Konfiguration.

Ich bin Personnaly, um Express mit Redis (über das Redis to Go Addon) als SessionStore zu verwenden, und es funktioniert gut auf Heroku.

Exemple:

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
        }));
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top