Примечание: Произведены некоторые обновления на основе новой информации. Старые идеи были добавлены в виде комментариев ниже.
Примечание: Сделано несколько обновлений (снова) на основе новой информации. Старые идеи были добавлены как комментарии ниже (снова).
Мы запускаем два экземпляра CouchDB на отдельных компьютерах за обратными прокси-серверами Apache. При попытке репликации между двумя экземплярами:
curl -X POST http://user:pass@localhost/couchdb/_replicate -d '{ "source": "db1", "target": "http://user:pass@10.1.100.59/couchdb/db1" }' --header "Content-Type: application/json"
(мы начали использовать curl для отладки проблемы)
мы получаем ошибку, похожую на:
{"error":"case_clause","reason":"{error,\n {{bad_return_value,\n {invalid_json,\n <<\"<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\">\\n<html><head>\\n<title>404 Not Found</title>\\n</head><body>\\n<h1>Not Found</h1>\\n<p>The requested URL /couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20 was not found on this server.</p>\\n<hr>\\n<address>Apache/2.2.3 (Red Hat) Server at 10.1.100.59 Port 80</address>\\n</body></html>\\n\">>}},\n {child,undefined,\"01e935dcd2193b87af34c9b449ae2e20\",\n {gen_server,start_link,\n [couch_rep,\n [\"01e935dcd2193b87af34c9b449ae2e20\",\n {[{<<\"source\">>,<<\"db1\">>},\n {<<\"target\">>,\n <<\"http://user:pass@10.1.100.59/couchdb/db1\">>}]},\n {user_ctx,<<\"user\">>,\n [<<\"_admin\">>],\n <<\"{couch_httpd_auth, default_authentication_handler}\">>}],\n []]},\n temporary,1,worker,\n [couch_rep]}}}"}
Таким образом, после дальнейших исследований выясняется, что apache возвращает эту ошибку, не пытаясь получить доступ к CouchDB (согласно файлам журнала). Чтобы быть понятным при подаче следующий URL
/couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20
Apache передает запрос в CouchDB и возвращает ошибку CouchDB 404. С другой стороны, когда происходит репликация, фактически передается URL-адрес
/couchdb/db1/_local%2F01e935dcd2193b87af34c9b449ae2e20
, который определяет Apache, является отсутствующим документом и возвращает собственную ошибку 404 для , при этом не передает запрос в CouchDB. Это, по крайней мере, дает мне новые возможности, но я все равно могу использовать помощь, если у кого-то есть ответ от руки.