通过 REST-API 的 Couchbase 移动复制

Couchbase mobile replication through REST-API

在尝试将 couchbase mobile(版本 1.1.0)集成到我们的混合移动应用程序(ionic)中时,我们 运行 遇到了 iOS 上的推送复制问题。

在应用程序的某个时刻(在创建本地数据库等之后)成功创建了一个包含一些视图的设计文档。 还创建并启动了连续的推拉复制。

在轮询推送复制状态时,我们注意到它在启动后不久就停止了(连续复制不正常)。

Couchbase 移动回复错误 (404)

WARNING: CBL_Pusher[http://server:4985/bucket-sync-gateway]: _bulk_docs got an error: {
   error = "bad_request";
   id = "_design/app";
   reason = "Invalid doc ID";
   status = 400;
}

同步网关记录了类似的错误:

BulkDocs: Doc "_design/app" --> 400 Invalid doc ID (400 Invalid doc ID)

这只发生在 iOS。 android 版本没有复制问题(也许设计文档被忽略了?)

知道这里的问题是什么吗?

干杯,

伯特

您使用的是哪个版本的 Couchbase Lite 和 Sync Gateway?我相信每个版本 1.1 中的行为都得到了改进。具体来说,当客户端尝试上传设计文档时,Sync Gateway 现在 returns 403 Forbidden 而不是 400 Bad Request。 Couchbase Lite 复制器将在此状态后继续运行,而不是因错误而停止。

设计文档存在问题,因为它们通常包含映射、缩减或过滤函数形式的可执行 (JavaScript) 代码。出于安全原因,Sync Gateway(如 CouchDB)不允许非管理员客户端上传一个。

更糟糕的是,让您的 iOS 应用程序下载设计文档可能违反了您的 Apple 开发者协议,因为不允许应用程序执行下载的代码。 (我说 "probably" 的原因是因为异常是 JavaScript 代码 运行 在网络浏览器中。设计文档确实包含 JS,而您的 PhoneGap 应用程序代码确实 运行在浏览器中,但 map/reduce/filter 函数 运行 不在浏览器中,而是在 Couchbase Lite 调用的单独 JS 上下文中。我不是律师,我不知道 Apple 会怎么想。据我所知,它永远不会出现。)

—Jens Alfke (移动架构师,Couchbase)