2016-07-31 23 views
0

私はCouchDBのインスタンスを2つ持ち、それぞれ別のインスタンスを複製します。ここで問題となるのは、新しいデータベースが作成されるたびに、新しく作成されたデータベースと複製用の_replicator文書を作成するPOSTを監視する必要があることです。CouchDBは新しく作成されたデータベースを自動複製します

_replicator文書の挿入をトリガーせずに、データベース全体を簡単に複製する方法はありますか?

答えて

1

これはわかりません。私は似たようなものがあります。私は変更通知を聞くために小さなノードアプリケーションを書いた。新しいデータベースを作成すると、変更通知はノードアプリケーションに通知し、ノードアプリケーションはそれ以外のもの、たとえば複製を作成します。ここ

+0

新しいデシベルを聞くためにあなたのコードを共有するために、任意の可能性変更? – CIF

+0

私の遅い応答に申し訳ありません、私はたくさんあった。 CouchDBで新しく作成されたデータベースをリッスンするための小さなノードアプリケーションを作成するヒントについては、私の新しい答えを見てください。 – Sceada

0

OK]をクリックして、ドイツ語、コメントを気の毒に私のコードの抜粋です:)

/** 
* 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(); 
  • 機能のログはcouchdb.logファイルにいくつかのロギングを行うために私を助けます。

  • _serializeAsUrl関数は、ノードモジュールnanoの関数で、何らかのフォーマットを行います。

  • process.openStdin()を使用して、couchdbから放出されたイベントをリッスンし始めます。

  • stdin.on()を使用すると、出力されたイベントを取得できます。

  • 関数チェッカーは、収集されたイベントを受け取り、配信された情報に基づいてこれまで何をしています(この関数は無限ループでなければなりません)。

    次を追加する必要がCouchDBのコンフィグで

:詳細については

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

このサイト上で見てみましょう:http://docs.couchdb.org/en/1.6.1/config/externals.html

関連する問題