Couchdb 复制时,Cloudant“case_子句”与数据库一起出错

Couchdb 复制时,Cloudant“case_子句”与数据库一起出错,couchdb,cloudant,bigcouch,pouchdb,Couchdb,Cloudant,Bigcouch,Pouchdb,我正在使用PockDB和Cloudant,当我的web应用程序启动时,它会在浏览器中从Cloudant复制到我的PockDB。我对PockDB的内部工作方式有一个概念,我认为这是该流程在高水平上的工作方式: 复制开始 从cloudant数据库获取检查点文档,该文档包含从服务器检索到的最新序列号,如果不存在,则假定序列为0,这是我的情况 从从该序列号开始释放的更改中获取更改,最多可获取25个更改 Writesor使用新的序列号将检查点文档更新回cloudant服务器。这样,如果发生网络错误,它可以

我正在使用PockDB和Cloudant,当我的web应用程序启动时,它会在浏览器中从Cloudant复制到我的PockDB。我对PockDB的内部工作方式有一个概念,我认为这是该流程在高水平上的工作方式:

复制开始 从cloudant数据库获取检查点文档,该文档包含从服务器检索到的最新序列号,如果不存在,则假定序列为0,这是我的情况 从从该序列号开始释放的更改中获取更改,最多可获取25个更改 Writesor使用新的序列号将检查点文档更新回cloudant服务器。这样,如果发生网络错误,它可以在停止的位置继续,或者进行下一次复制 重复,直到没有变化为止 复制完成 问题是在步骤4,当Pocket第一次尝试将该文档写入cloudant服务器时,服务器返回一个“case_子句”错误。我认为问题可能是发送到cloudant的id无效cloudant不接受这种格式的id,因为写入服务器的文档id是_local/799c37dfaefb3774a04f55c7f8cee947或结尾的其他随机数字和字符。我不知道这对于cloudant是否是有效的文档id,也就是说,因为这对于PockDB是准确的,所以我想我是在问,这个问题对于cloudant是不可接受的id,还是基于cloudant服务器返回的错误存在其他问题

以下是正在编写的文档:

以下是Chrome调试器的完整错误输出:

{ error: "case_clause" reason: "{{case_clause,{ok,{error,[{{doc,>, {338, [>]}, {[{>,>}]}, [],false,[]}, {error,internal_server_error}}]}}}, [{fabric,update_doc,3},{chttpd_db,'-update_doc/6-fun-0-',3}]}" stack: Array[4] 0: "chttpd_db:update_doc/6" 1: "chttpd:handle_request/1" 2: "mochiweb_http:headers/5" 3: "proc_lib:init_p_do_apply/3" length: 4 __proto__: Array[0] status: 500 } Request URL:http://lessontrek.toddbluhm.c9.io/db/ilintindingreseseldropec/_local%2F799c37dfaefb3774a04f55c7f8cee947 Request Method:PUT Status Code:500 Internal Server Error Request Headersview parsed PUT /db/ilintindingreseseldropec/_local%2F799c37dfaefb3774a04f55c7f8cee947 HTTP/1.1 Host: lessontrek.toddbluhm.c9.io Connection: keep-alive Content-Length: 111 Accept: application/json Origin: http://lessontrek.toddbluhm.c9.io User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 Content-Type: application/json Referer: http://lessontrek.toddbluhm.c9.io/app Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: connect.sid=s%3A8MVBFmbizTX4VNOqZNtIuxQI.TZ9yKRqNv0ePbTB%2FmSpJsncYszJ8qBSD5EWHzxQYIbg; AuthSession=(removed for security purposes, but valid); db_name=ilintindingreseseldropec; __utma=200306492.386329876.1368934655.1375164160.1375252679.55; __utmc=200306492; __utmz=200306492.1372711539.22.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); c9.live.proxy=(removed for security purposes, but valid) Request Payloadview parsed {"_id":"_local/799c37dfaefb3774a04f55c7f8cee947","last_seq":"63","_rev":"338-7db9750558e43e2076a3aa720a6de47b"} Response Headersview parsed HTTP/1.1 500 Internal Server Error x-powered-by: Express vary: Accept-Encoding x-couch-request-id: 7d2ca9fc server: CouchDB/1.0.2 (Erlang OTP/R14B) date: Wed, 31 Jul 2013 07:29:23 GMT content-type: application/json cache-control: must-revalidate content-encoding: gzip transfer-encoding: chunked via: 1.1 project-livec993c2dc8b8c.rhcloud.com (node-web-proxy/0.4) X-C9-Server: proxy_subdomain_collab-bus2_01 注意:当我进入cloudant的Futon并使用其id手动输入检查点文档的url时,它并不存在。 谢谢 编辑:

使用Chrome调试器获取上述请求的标题信息:

{ error: "case_clause" reason: "{{case_clause,{ok,{error,[{{doc,>, {338, [>]}, {[{>,>}]}, [],false,[]}, {error,internal_server_error}}]}}}, [{fabric,update_doc,3},{chttpd_db,'-update_doc/6-fun-0-',3}]}" stack: Array[4] 0: "chttpd_db:update_doc/6" 1: "chttpd:handle_request/1" 2: "mochiweb_http:headers/5" 3: "proc_lib:init_p_do_apply/3" length: 4 __proto__: Array[0] status: 500 } Request URL:http://lessontrek.toddbluhm.c9.io/db/ilintindingreseseldropec/_local%2F799c37dfaefb3774a04f55c7f8cee947 Request Method:PUT Status Code:500 Internal Server Error Request Headersview parsed PUT /db/ilintindingreseseldropec/_local%2F799c37dfaefb3774a04f55c7f8cee947 HTTP/1.1 Host: lessontrek.toddbluhm.c9.io Connection: keep-alive Content-Length: 111 Accept: application/json Origin: http://lessontrek.toddbluhm.c9.io User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 Content-Type: application/json Referer: http://lessontrek.toddbluhm.c9.io/app Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: connect.sid=s%3A8MVBFmbizTX4VNOqZNtIuxQI.TZ9yKRqNv0ePbTB%2FmSpJsncYszJ8qBSD5EWHzxQYIbg; AuthSession=(removed for security purposes, but valid); db_name=ilintindingreseseldropec; __utma=200306492.386329876.1368934655.1375164160.1375252679.55; __utmc=200306492; __utmz=200306492.1372711539.22.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); c9.live.proxy=(removed for security purposes, but valid) Request Payloadview parsed {"_id":"_local/799c37dfaefb3774a04f55c7f8cee947","last_seq":"63","_rev":"338-7db9750558e43e2076a3aa720a6de47b"} Response Headersview parsed HTTP/1.1 500 Internal Server Error x-powered-by: Express vary: Accept-Encoding x-couch-request-id: 7d2ca9fc server: CouchDB/1.0.2 (Erlang OTP/R14B) date: Wed, 31 Jul 2013 07:29:23 GMT content-type: application/json cache-control: must-revalidate content-encoding: gzip transfer-encoding: chunked via: 1.1 project-livec993c2dc8b8c.rhcloud.com (node-web-proxy/0.4) X-C9-Server: proxy_subdomain_collab-bus2_01
Cloudant和CouchDB一样,希望所有的本地rev都从0开始。BackDB不应生成此表单的版本值。如果您尝试对CouchDB执行此PUT,您将获得相同的堆栈跟踪。

Cloudant与CouchDB一样,希望所有的本地rev都从0开始。BackDB不应生成此表单的版本值。如果您尝试对CouchDB执行此PUT,您将获得相同的堆栈跟踪。

太好了,谢谢。我认为,这是因为_rev的存在,它指出了我们本地文档处理中的一个缺陷。我们会修好的。啊,我完全错过了!谢谢你指出这一点。如果是新文档,则不应包括_rev!我相信这也是PockDB中的一个bug。而且,仅供参考,Cloudant并不关心本地文档的_rev值。为_rev提供非0似乎会让bug感到好笑。现在,在cloudant上更新本地文档时,您只需删除_rev即可。太好了,谢谢。我认为,这是因为_rev的存在,它指出了我们本地文档处理中的一个缺陷。我们会修好的。啊,我完全错过了!谢谢你指出这一点。如果是新文档,则不应包括_rev!我相信这也是PockDB中的一个bug。而且,仅供参考,Cloudant并不关心本地文档的_rev值。为_rev提供非0似乎会让bug感到好笑。现在,在cloudant上更新本地文档时,只需删除_rev即可。