在couchdb中“启动复制时出错”

时间:2011-09-06 01:11:11

标签: couchdb

我正在couchdb 1.1.0中创建一个“拉”复制器文档:

curl -X PUT http://admin:pass@localhost:5984/_replicator/maintenance -d '
{
    "_id": "maintenance",
    "source":  "http://other.host:5984/maintenance",
    "target":  "maintenance",
    "create_target":  true
}'

现在我检查复制状态:

curl -X GET http://admin:pass@localhost:5984/_replicator/maintenance
{"_id":"maintenance","_rev":"2-0f25f80a2726640944d527d6035e5b80","source":"http://other.host:5984/","target":"maintenance","create_target":true,"_replication_state":"error","_replication_state_time":"2011-09-06T02:35:10+02:00","_replication_id":"354746bf47831195261bf54f3cb6136b"}

出了点问题,但我不知道是什么。我甚至手动创建了数据库,但它仍然无法正常工作。关于问题可能出现的任何想法?

5 个答案:

答案 0 :(得分:4)

事实证明我使用了错误的url来启动复制。而不是

curl -X PUT http://admin:pass@localhost:5984/_replicator/maintenance

我必须这样做:

curl -X POST http://admin:pass@localhost:5984/_replicate -H ...

现在复制按预期开始。它甚至可以通过create_target和continuous来触发,并且工作正常。

我仍然遇到一些问题:如何列出活动复制?它们未列在localhost:5984/_replicator中,而网址localhost:5984/_replicate仅列出了POST请求。如何取消连续复制?

最后:拥有两个不同的网址,一个localhost:5984/_replicate和一个localhost:5984/_replicator的目的是什么?

答案 1 :(得分:2)

source属性错误,您必须添加远程数据库:

"source":  "http://other.host:5984/maintenance"

应该有用!

干杯,伯恩哈德

答案 2 :(得分:0)

我怀疑你需要在other.host进行身份验证(例如,它可能有require_valid_user = true);

"source":"http://user:pass@other.host:5984/maintenance"

您可能希望锁定对_replicator数据库的访问权限,因为数据库的任何读者都可以看到该密码(使用_security文档将其锁定)。

加强这一点是CouchDB未来版本讨论的一个活跃主题。

答案 3 :(得分:0)

_replicator 是用于在CouchDB重新启动后记住复制的新格式。如果使用此格式,则只需删除复制文档即可取消复制。

https://gist.github.com/832610

答案 4 :(得分:0)

当我遇到此错误时:

  

[星期一,2011年9月12日16:45:05 GMT] [错误] [< 0.4323.3>]启动复制错误'045020f93f9da91e1e6b609754b32a15 + create_target'(文档'维护'):{unauthorized,<<“未经授权访问数据库维护“>>}。在160秒内重试

实际问题是我在JSON中指定了create_target:true,但数据库已经存在。我相信如果目标已经存在,之前create_target可以安全使用,但不能在_replicator / model中使用。