0

在 Mac OS 中建立 couchbase 服务器和 couchbase 同步网关之间的连接 -

$ ../sync_gateway 
 ==== Couchbase Sync Gateway/1.0.4(34;04138fd) ====

 Configured Go to use all 2 CPUs; `setenv GOMAXPROCS` to override this
 Opening db /sync_gateway as bucket "sync_gateway", pool "default", server <walrus:>
 Opening Walrus database sync_gateway on <walrus:>
 Using default sync function `'channel(doc.channels)'` for database "sync_gateway"
 Starting profile server on 
 ***Starting admin server on 127.0.0.1:4985
 Starting server on :4984 ...***

我创建了一个 config.json 文件并尝试将其连接到该服务器,但默认情况下它不会发生,它会转到 127.0.0.1:4985

谁能帮我吗??

4

1 回答 1

1

将以下配置值添加到您的 config.json 文件中:

"管理界面":"[YOUR_PREFERRED_IP_FOR_ADMIN_INTERFACE]:4985",

adminInterface 字段让 sync_gateway 知道在哪个 IP:PORT 上运行管理界面。

此外,您需要告诉 sync_gateway 在哪里触发存储桶的其余 API(下面示例中的待办事项)。如下面的示例所示,您可以通过在数据库的配置中添加“服务器”:“ http://[COUCHBASE_SERVER_IP]:8091 ”来做到这一点。

所以,

  1. 您将在 [YOUR_PREFERRED_IP_FOR_ADMIN_INTERFACE]:4985 上触发管理员休息 API。
  2. 并且,sync_gateway 将为 [COUCHBASE_SERVER_IP]:8091 上的“todos”存储桶的 CRUD 操作触发 rest api。

这是示例配置文件:

{
  "interface":"192.168.1.117:4984",
  "adminInterface":"127.0.0.1:4985",
  "log": ["CRUD", "REST+", "Access"],
  "facebook": { "register": true },
  "databases": {
    "todos": {
      "server": "http://[COUCHBASE_SERVER_IP]:8091",
      "users": {
        "GUEST": {"disabled": true}
      },
      "sync": 
    `
      function(doc, oldDoc) {
        // NOTE this function is the same across the iOS, Android, and PhoneGap versions.
        if (doc.type == "task") {
          if (!doc.list_id) {
            throw({forbidden : "Items must have a list_id"})
          }
          channel("list-"+doc.list_id);
        } else if (doc.type == "list") {
          channel("list-"+doc._id);
          if (!doc.owner) {
            throw({forbidden : "List must have an owner"})
          }
          if (oldDoc) {
            var oldOwnerName = oldDoc.owner.substring(oldDoc.owner.indexOf(":")+1);
            requireUser(oldOwnerName)
          }
          var ownerName = doc.owner.substring(doc.owner.indexOf(":")+1);
          access(ownerName, "list-"+doc._id);
          if (Array.isArray(doc.members)) {
            var memberNames = [];
            for (var i = doc.members.length - 1; i >= 0; i--) {
              memberNames.push(doc.members[i].substring(doc.members[i].indexOf(":")+1))
            };
            access(memberNames, "list-"+doc._id);
          }
        } else if (doc.type == "profile") {
          channel("profiles");
          var user = doc._id.substring(doc._id.indexOf(":")+1);

          if (user !== doc.user_id) {
            throw({forbidden : "Profile user_id must match docid : " + user + " : " + doc.user_id})
          }
          requireUser(user);
          access(user, "profiles"); // TODO this should use roles
        }
      }
    `
    }
  }
}
于 2015-06-06T18:41:46.247 回答