2011-11-16 33 views
4

NPM的(節點包管理器)註冊表使用CouchDB在CouchDB實例上存儲元數據信息和包的壓縮包http://registry.npmjs.org/registry ..我使用以下複製文檔(CouchDB 1.1.0)複製註冊表的一個子集,以我公司的CouchDB:CouchDB過濾的複製:在第一次完整複製後修改doc_id

{ "_id": "fetch-npm-registry", "doc_ids": [ "coffee-script", "nodeunit" ], "source": "http://couchdb.mycompany.com:5984/registry", "target": "registry", }

[順便說一句,在CouchApp處理這是https://github.com/isaacs/npmjs.org(也有完整的安裝說明)。

如果我想添加另一個依賴項到我的包中,我的天真想法是我只是修改doc_ids列表(比如說,到["coffee-script", "nodeunit", "npm"])並再次啓動複製。

This 但是不起作用:複製立即完成,我想添加到複製(在這種情況下爲"npm")的軟件包丟失。

[知道我的解決方法是刪除目標數據庫,再次複製和 - 因爲我也用這個本地註冊表出版我的專屬套餐 - 重新發布我的本地包。 嘆息]


修訂18.11.2011

這裏就是我想會發生什麼(不是全部CouchDB的內部專家,但也許有一定的道理吧):

第一次成功複製後,CouchDB中存儲了最後一個(最高?)序列在數據庫中一個隱藏文件中複製的最新文件的ID(我曾經知道如何訪問這些,指針歡迎)。然後,當我更改doc_ids關於上次成功複製(序列ID)的緩存信息不會失效(或清除)。然後,當它告訴使用相同的數據庫再次複製它比較順序ID並決定一切都很好。

+0

你有沒有[檢查衝突](http://guide.couchdb.org/draft/conflicts.html#working)? –

+0

不,但不應該有。在此期間,我並沒有推出自己的npm版本(如'npm publish')。我有一些原始內容的包(我的專有包),其餘的應該從上游複製。這兩套軟件不相交。 – peritus

+0

然後檢查權限。複製過程中的錯誤報告很弱......請檢查日誌。一些更多的信息將是有用的:CouchDB版本;編譯或打包;什麼OS? –

回答

0

我Couchbase單服務器2.0開發者預覽版5.有它的作品嚐試過。我curl命令是(但需要相當長的幾分鐘):

curl -X POST 'http://localhost:5984/_replicate' -H 'Content-Type: application/json' -d '{"doc_ids": [ "coffee-script", "nodeunit", "npm" ], "source": "http://registry.npmjs.org:5984/registry", "target": "registry", "create_target": true} 

它是基於Apache的一些樹幹CouchDB的版本。

請您與Apache CouchDB的1.1.1嘗試。我記得有一個空ID的複製器錯誤(並且npm存儲庫有這樣的文檔),它已經修復。

乾杯, 沃爾克

1

1) http://registry.npmjs.org/registry沒有登記數據庫,但http://registry.npmjs.org是。

2)

{ 「_id」: 「讀取NPM-註冊表」, 「doc_ids」:[ 「咖啡腳本」, 「nodeunit」], 「源」: 「http://couchdb.mycompany.com:5984/registry」, 「目標」: 「註冊表」,}

你確定你從http://couchdb.mycompany.com:5984/registry而不是http://registry.npmjs.org複製?