我正在尝试在我的xamarin应用程序中将couchbase用于在线和离线数据库。离线部分工作正常,但无法同步。
我已经安装了ouchbase服务器,创建了一个名为:userprofile的存储桶,并且有一个用户,并且启用了应用程序访问和只读管理员角色。我也安装了同步网关,并且已经配置好了,这是我的配置.json文件
{
"interface":":4984",
"log": ["*"],
"databases": {
"userprofile": {
"users": { "username": { "password": "password"} },
"server": "walrus:",
"sync": `
function sync(doc, oldDoc) {
/* Authorization */
requireUser(doc.email);
/* Data Validation */
if (!isDelete()) {
validateNotEmpty("email", doc.email);
if (isCreate()) {
var expectedDocId = "user" + "::" + doc.email;
if (expectedDocId != doc._id) {
throw({forbidden: "user doc Id must be of form user:email"});
}
} else {
validateReadOnly("email", doc.email, oldDoc.email);
}}
/* Routing */
var email = getEmail();
channel("channel." + email);
/* Access Control */
if (!isDelete()) {
access(email,"channel." + email)
}
function getType() {
return (isDelete() ? oldDoc.type : doc.type);
}
function getEmail() {
return (isDelete() ? oldDoc.email : doc.email);
}
function isCreate() {
return ((oldDoc == false) || (oldDoc == null || oldDoc._deleted) && !isDelete());
}
function isUpdate() {
return (!isCreate() && !isDelete());
}
function isDelete() {
return (doc._deleted == true);
}
function validateNotEmpty(key, value) {
if (!value) {
throw({forbidden: key + " is not provided."});
}
}
function validateReadOnly(name, value, oldValue) {
if (value != oldValue) {
throw({forbidden: name + " is read-only."});
}
}}`
}
}
}
并且我使用此命令来配置同步网关:
C:\ Program Files \ Couchbase \ Sync Gateway \ sync_gateway sync-gateway-config-userprofile-walrus.json
而且我将同步URL更改为ws://10.0.2.2:4984,因为我使用的是android emulator。但是设备之间没有同步,有人可以帮我吗?
1]您如何验证同步是否正常(您按照什么步骤进行测试)?如果您按照here的说明进行操作,则无法使用上面的配置。因为您在配置文件中配置的唯一有效用户是具有凭据“用户名”和“密码”的用户,并且教程中的步骤指示了不同的用户名/密码。因此,请确保使用配置文件中的凭据登录到您的应用,然后尝试使用
2)您表示已运行了为Sync Gateway访问配置的Couchbase服务器。但是您的配置文件指示您正在使用“海象”模式(“海象”模式是仅用于开发/测试目的的仅内存模式)。换句话说,在海象模式下,您并没有指向实际的Couchbase服务器。
如果要与后端Couchbase服务器同步(应该同步),则在配置文件的"server"属性中替换“ walrus:”,以指向该Couchbase服务器。
3)进行故障排除的最佳资源是同步网关日志。这应该就同步出了什么问题给出足够的提示。如果上述提示不起作用,请发布您看到的错误]