2016-07-31 36 views
0

Ich habe zwei Instanzen von CouchDB und repliziere jeweils eine andere. Problem hier ist jedes Mal, wenn eine neue Datenbank erstellt wird, muss ich nach neu erstellten Datenbank suchen und POST _ Replicator-Dokument für die Replikation erstellen.CouchDB repliziert die neu erstellte Datenbank automatisch

Gibt es eine Möglichkeit, die gesamten Datenbanken problemlos zu replizieren, ohne das _replicator-Dokument einzufügen?

Antwort

1

Nicht, dass ich weiß. Ich habe etwas ähnliches. Ich habe eine kleine Knotenanwendung geschrieben, um die Änderungsbenachrichtigung anzuhören. Wenn ich eine neue Datenbank erstelle, benachrichtigt die Änderungsbenachrichtigung meine Knotenanwendung und die Knotenanwendung erstellt dann alles andere, z. B. die Replikation.

+0

Jede Möglichkeit, Ihren Code zu teilen, um neue db zu hören Änderungen? – CIF

+0

Entschuldigung für meine späte Antwort, ich hatte viel zu tun. Siehe meine neue Antwort für einige Hinweise, um eine kleine Knoten-Anwendung zu schreiben, die auf neu erstellte Datenbanken in CouchDB wartet. – Sceada

0

Ok hier ist ein Ausschnitt aus meinem Code, sorry für die Deutsch Kommentare :)

/** 
* In die Log-Datei der CouchDB einen neuen 
* Eintrag hinzufügen. 
* 
* @param msg 
* 
* @author Robert Gregat 
*/ 
var log = function(msg) { 
    console.log(JSON.stringify(["log", msg])); 
}; 


/** 
    * Dies ist eine Funktion die aus dem nano Node Module entnommen 
    wurde. 
    * 
    * @author https://github.com/dscape/nano 
    */ 
    function _serializeAsUrl(db) { 
    if (typeof db === 'object' && db.config && db.config.url && db.config.db) { 
     return urlResolveFix(db.config.url, encodeURIComponent(db.config.db)); 
    } else { 
     return db; 
    } 
    } 

// CouchDB stellt eine API bereit die über stdin Befehle entgegen 
    nimmt. 
var stdin = process.openStdin(); 

// Das Encoding auf utf8 einstellen. 
stdin.setEncoding('utf8'); 


// Auswerten von empfangenen Daten der CouchDB. Wenn eine neue 
    Datenbank angelegt wurde, enthält das 
// JSON Objekt den value created. Tritt dieser Fall ein, wird 
    automatisch aus der design und custom db 
// alle Dokumente in die neue Datenbank repliziert. 
stdin.on('data', function(d) { 
    // Parsen des Ergebnis 
    if (d !== null) { 
     parsedData.push(JSON.parse(d)); 
    } 
}); 

/** 
* Die Applikation muss in einer Endlosschleife laufen. 
* 
* @author Robert Gregat 
*/ 
var checker = function() { 
    for (var index in parsedData) { 
    if (parsed.type === "created" && parsed.db !== "design" && parsed.db !== "custom") { 
     // do stuff 
    } 
    } 
    parsedData = []; 

    setTimeout(checker, 1000); 
} 

// Endlosschleife starten. 
checker(); 
  • Die Funktion log hilft mir einige Protokollierung in die couchdb.log Datei zu tun.

  • Die Funktion _serializeAsUrl ist eine Funktion des Knotenmoduls nano, um Formatierungen vorzunehmen.

  • Mit process.openStdin() beginne ich von der couchdb nach abgestrahlten Ereignissen zu hören.

  • Mit Stdin.on() kann ich die emittierten Ereignisse erfassen.

  • Der Funktionsüberprüfer nimmt die gesammelten Ereignisse und macht, was ich will, basierend auf den gelieferten Informationen (Diese Funktion muss in einer Endlosschleife sein).

Im couchdb Config müssen Sie die folgende hinzu:

[update_notification] 
[name] = nodejs [path/to/your/node_application] 

Weitere Informationen Schauen Sie auf dieser Seite nehmen: http://docs.couchdb.org/en/1.6.1/config/externals.html