Le registre NPM (node package manager) utilise CouchDB pour stocker les méta-informations et les archives de packages sur une instance CouchDB à http://registry.npmjs.org/registry .. J'utilise le document de réplication suivant (CouchDB 1.1.0) pour répliquer un sous-ensemble du registre à mon CouchDB d'entreprise:Réplication filtrée CouchDB: Modifier doc_id après la première réplication complète
{ "_id": "fetch-npm-registry", "doc_ids": [ "coffee-script", "nodeunit" ], "source": "http://couchdb.mycompany.com:5984/registry", "target": "registry", }
[BTW, la manipulation est à ce couchapp https://github.com/isaacs/npmjs.org (également avec des instructions d'installation complètes)]. Si je veux ajouter une autre dépendance à un de mes paquets, ma pensée naïve était que je viens de modifier la liste doc_ids
(disons, à ["coffee-script", "nodeunit", "npm"]
) et redémarrer la réplication.
Ce ne fonctionne pas cependant: La réplication est terminée immédiatement et le paquet que je voulais ajouter à la réplication (dans ce cas "npm"
) est manquante.
[La solution de contournement que je connais est de supprimer la base de données cible, de la répliquer à nouveau et - parce que j'utilise également ce registre local pour publier mes packages propriétaires - republier mes paquets locaux. soupir]
Amendement 18.11.2011
Voici ce que je pense ce qui se passe (pas du tout un expert en internals CouchDB, mais peut-être il y a une certaine vérité à elle):
Après la première réplication réussie, CouchDB stocke le dernier (plus haut?) ID de séquence du dernier document qu'il a répliqué dans un document caché dans la base de données (j'ai déjà su y accéder, les pointeurs sont les bienvenus). Ensuite, lorsque je change le doc_ids
cette information mise en cache sur la dernière réplication réussie (l'ID de séquence) n'est pas invalidée (ou effacée). Ensuite, quand il est dit de répliquer à nouveau avec la même base de données, il compare les ID de séquence et décide que tout va bien.
Avez-vous [vérifié les conflits] (http://guide.couchdb.org/draft/conflicts.html#working)? –
Non, mais il ne devrait pas y en avoir. Je n'ai pas poussé (comme dans 'npm publish') ma propre version de npm en attendant. J'ai quelques paquets qui sont le contenu original (mes propriétaires) et le reste devrait être répliqué d'en amont. Ces deux ensembles de packages sont disjoints. – peritus
Ensuite, vérifiez les autorisations. Les rapports d'erreurs lors de la réplication sont faibles ... vérifiez également les journaux. Quelques informations supplémentaires seraient utiles: version CouchDB; compilé ou emballé; quel OS? –