Как настроить URL-адрес синхронизации в шлюзе синхронизации couchbase для подключения к серверу couchbase

Я пытаюсь использовать CouchBase Lite для своего мобильного приложения. Я видел в учебнике couchbase, но он показывает, как добавить URL-адрес синхронизации для сервера моржа, а не для сервера couchbase. Как настроить URL-адрес синхронизации для сервера couchbase.

Ниже приведен код, который я использую, но не могу передать или получить данные с сервера couchbase.

private URL createSyncURL(boolean isEncrypted){ URL syncURL = null; String host = "https://127.0.0.1"; String port = "4986"; bucketName = "sync_gateway"; try { syncURL = new URL(host + ":" + port + "/" + bucketName); } catch (MalformedURLException me) { me.printStackTrace(); } return syncURL; }

Файл config.json для шлюза синхронизации находится ниже

{
    "log":["CRUD+", "REST+", "Changes+", "Attach+"],
    "interface":":4986",
   "adminInterface":":14985",
    "databases": {
    "sync_gateway": {
        "server":"http://localhost:8091",
        "bucket":"sync_gateway",
        "sync":`
            function (doc) {
            channel (doc.channels);
        }`,
        "users": {
            "GUEST": {
                "disabled": false,
                "admin_channels": ["*"]
            }
        }
    }
    }
}

и ниже код приложения для Android

package com.couchbase.examples.couchbaseevents;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.util.Log;

import com.couchbase.lite.CouchbaseLiteException;
import com.couchbase.lite.Database;
import com.couchbase.lite.Document;
import com.couchbase.lite.Manager;
import com.couchbase.lite.android.AndroidContext;
import com.couchbase.lite.replicator.Replication;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    public static final String DB_NAME = "couchbaseevents";
    final String TAG = "CouchbaseEvents";
    Database database = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(TAG, "Begin Couchbase Events App");
    Manager manager = null;
    try {
        manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS);
        database = manager.getDatabase(DB_NAME);
    } catch (Exception e) {
        Log.d(TAG, "Error getting database", e);
        return;
    }
    Document createdDocument = createDocument(database);
    Log.d(TAG, "createdDocument=" + String.valueOf(createdDocument.getProperties()));
    // retrieve the document from the database
    Document retrievedDocument = database.getDocument(createdDocument.getId());
// display the retrieved document
    Log.d(TAG, "retrievedDocument=" + String.valueOf(retrievedDocument.getProperties()));
    updateDoc(database, createdDocument.getId());
    Document updatedDocument = database.getDocument(createdDocument.getId());
    Log.d(TAG, "updatedDocument=" + String.valueOf(updatedDocument.getProperties()));
    try {
        startReplications();
    } catch (CouchbaseLiteException e) {
        e.printStackTrace();
    }
    Log.d(TAG, "End Couchbase Events App");
    }
    private void updateDoc(Database database, String documentId) {
    Document document = database.getDocument(documentId);
    try {
        // Update the document with more data
        Map<String, Object> updatedProperties = new HashMap<String, Object>();
        updatedProperties.putAll(document.getProperties());
        updatedProperties.put("eventDescription", "Everyone is invited!");
        updatedProperties.put("address", "123 Elm St.");
        // Save to the Couchbase local Couchbase Lite DB
        document.putProperties(updatedProperties);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    }
    private Document createDocument(Database database) {
    // Create a new document and add data
    Document document = database.createDocument();
    String documentId = document.getId();
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("name", "Big Party");
    map.put("location", "My House");
    try {
        // Save the properties to the document
        document.putProperties(map);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    Document document1 = database.createDocument();
    documentId = document1.getId();
    Map<String, Object> map1 = new HashMap<String, Object>();
    map1.put("name", "Yagyank");
    map1.put("location", "GGn");
    try {
        // Save the properties to the document
        document1.putProperties(map1);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    Document document2 = database.createDocument();
    documentId = document2.getId();
    Map<String, Object> map2 = new HashMap<String, Object>();
    map2.put("name", "Farheen");
    map2.put("location", "GGn");
    try {
        // Save the properties to the document
        document2.putProperties(map2);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    return document2;
    }
    private URL createSyncURL(boolean isEncrypted){
    URL syncURL = null;
    String host = "127.0.0.1";
    String port = "4986";
    String dbName = "sync_gateway";
    try {
        syncURL = new URL("http://127.0.0.1:4986/sync_gateway");
        //syncURL = new URL(host + ":" + port + "/" + dbName);
    } catch (Exception me) {
        me.printStackTrace();
    }
    Log.d(syncURL.toString(),"URL");
    return syncURL;
    }
    private void startReplications() throws CouchbaseLiteException {
    Replication pull = database.createPullReplication(this.createSyncURL(false));
    Replication push = database.createPushReplication(this.createSyncURL(false));
    pull.setContinuous(true);
    push.setContinuous(true);
    pull.start();
    push.start();
    if(!pull.isRunning()){
        Log.d(TAG, "MyBad");
    }
    /*if(!push.isRunning()) {
        Log.d(TAG, "Replication is not running due to " +push.getLastError().getMessage());
        Log.d(TAG, "Replication is not running due to " +push.getLastError().getCause());
        Log.d(TAG, "Replication is not running due to " +push.getLastError().getStackTrace());
        Log.d(TAG, "Replication is not running due to " +push.getLastError().toString());
    }*/
    }

}

person Legendary_Hunter    schedule 03.05.2016    source источник


Ответы (1)


Вы не можете синхронизироваться напрямую с сервером Couchbase. Вам необходимо выполнить синхронизацию со шлюзом синхронизации. У Sync Gateway может быть два бэкэнда: Walrus (бэкэнд в памяти) и Couchbase Server.

С точки зрения вашего мобильного приложения серверная часть не имеет значения. Вам необходимо указать URL-адрес шлюза синхронизации. Предполагая, что шлюз синхронизации работает на вашем локальном компьютере и вы используете эмулятор Android для тестирования своего приложения, URL-адрес должен быть http://10.0.2.2:5984/sync_gateway

person Laurent Doguin    schedule 03.05.2016
comment
Я узнал об этом позже и попытался использовать URL-адрес шлюза синхронизации, но все равно УДАЧИ. Я могу вставлять данные с помощью developer.couchbase.com/documentation/mobile/1.2/develop/ api, и это успешно, но с моим кодом Android я не могу этого сделать. Я отредактировал вопрос и предоставил свой файл конфигурации и код Android. - person Legendary_Hunter; 03.05.2016
comment
Использование 127.0.0.1:4986/sync_gateway означает, что ваш шлюз синхронизации работает на вашем телефоне. Я полагаю, что это не так. Если он работает на вашем компьютере разработки и вы используете эмулятор, то адрес должен быть 10.0.2.2:4986/ sync_gateway - person Laurent Doguin; 03.05.2016