PouchDB 复制在复制时抛出错误
Posted
技术标签:
【中文标题】PouchDB 复制在复制时抛出错误【英文标题】:PouchDB Replication throws error upon replication 【发布时间】:2017-04-13 11:05:43 【问题描述】:当我尝试使用本地 pouchdb
复制远程 couchdb
(在 ubuntu 14.04- 64 bit
上)时,我遇到了这个奇怪的错误。
我的 couchdb 通过nginx
代理并在https
上运行。从客户端到 nginx 的流量是 ssl,而从 nginx 到 couchdb 的流量是简单的 http。在 couchdb 中启用了 Cors 请求。 Nginx 配置与 couchdb recommended 最相似。从数据库同步工作正常,但是在通过 chrome Version 54.0.2840.100 (64-bit) 调试时出现以下错误。
以下是错误的完整堆栈跟踪。
raven.min.js:2 Error: There was a problem getting docs.
at finishBatch (http://localhost:8100/lib/pouchdb/dist/pouchdb.js:6410:13)
at processQueue (http://localhost:8100/lib/ionic/js/ionic.bundle.js:27879:28)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:27895:27
at Scope.$eval (http://localhost:8100/lib/ionic/js/ionic.bundle.js:29158:28)
at Scope.$digest (http://localhost:8100/lib/ionic/js/ionic.bundle.js:28969:31)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:29197:26
at completeOutstandingRequest (http://localhost:8100/lib/ionic/js/ionic.bundle.js:18706:10)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:18978:7
at d (http://localhost:8100/lib/raven-js/dist/raven.min.js:2:4308) undefineda.(anonymous function) @ raven.min.js:2(anonymous function) @ ionic.bundle.js:25642(anonymous function) @ ionic.bundle.js:22421(anonymous function) @ angular.min.js:2processQueue @ ionic.bundle.js:27887(anonymous function) @ ionic.bundle.js:27895$eval @ ionic.bundle.js:29158$digest @ ionic.bundle.js:28969(anonymous function) @ ionic.bundle.js:29197completeOutstandingRequest @ ionic.bundle.js:18706(anonymous function) @ ionic.bundle.js:18978d @ raven.min.js:2
raven.min.js:2 Paused in lessondb replicate Error: There was a problem getting docs.
at finishBatch (http://localhost:8100/lib/pouchdb/dist/pouchdb.js:6410:13)
at processQueue (http://localhost:8100/lib/ionic/js/ionic.bundle.js:27879:28)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:27895:27
at Scope.$eval (http://localhost:8100/lib/ionic/js/ionic.bundle.js:29158:28)
at Scope.$digest (http://localhost:8100/lib/ionic/js/ionic.bundle.js:28969:31)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:29197:26
at completeOutstandingRequest (http://localhost:8100/lib/ionic/js/ionic.bundle.js:18706:10)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:18978:7
at d (http://localhost:8100/lib/raven-js/dist/raven.min.js:2:4308)
chrome中的网络日志显示部分请求被取消
我正在使用 couchdb 版本 - 1.6.1 和 pouchdb 版本 - 5.3.2。 我使用以下命令来复制 dbs:
myDB.replicate.from(remote_db_url,
live: true,
retry: true,
heartbeat: false
)
如果有人能对心跳参数有所了解,那就太好了。
【问题讨论】:
【参考方案1】:注意:我无法解决您描述的错误。也许完整的堆栈跟踪而不是屏幕截图可能会有所帮助...
但我会尝试对心跳参数进行一些说明:阅读docs 已经有所帮助。查看replicate
方法的高级选项:
options.heartbeat:配置 CouchDB 支持的心跳,使更改连接保持活动状态。
那么让我们看看CouchDB's docs 看看这个参数的作用:
网络是一种棘手的野兽,有时您不知道是没有变化还是您的网络连接过时了。如果您添加另一个查询参数 heartbeat=N,其中 N 是一个数字,CouchDB 将每 N 毫秒向您发送一个换行符。只要您收到换行符,您就知道没有新的更改通知,但 CouchDB 仍然准备好在发生下一个更改通知时向您发送。
所以基本上它似乎是一种轮询机制,每 n 毫秒(其中 n 是您指定的 heartbeat
值)发送一条消息(例如换行符),以确保两个数据库之间的连接仍然有效。
将值设置为false
将禁用此机制。
关于这个参数可以使用哪个值:
PouchDB docs 进一步说明,changes
方法有一个类似的参数,描述如下:
options.heartbeat:仅适用于 http 适配器,服务器发出心跳以保持长连接打开的时间(以毫秒为单位)。默认为 10000(10 秒),使用 false 禁用默认值。
【讨论】:
我们不应该对 https 请求使用心跳吗? 我已经添加了你提到的错误的完整堆栈跟踪以上是关于PouchDB 复制在复制时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
PouchDB + CouchDB 用于具有权限管理的离线公司应用程序(IBM Domino 替换)