1

問題: プッシュ中に、肯定的な応答が得られたにもかかわらず、「Bad Request」エラーとある種の認証エラーが発生します。

私は CouchDB や Couchbase の経験がほとんどありませんが、私が理解していることから、通常は Couchbase-Lite を Couchbase Sync Gateway と同期しますが、後者は CouchDB のレプリケーション プロトコルを使用するため、"チャンネル」。CouchDB を使用したレプリケーションについては、こちらで説明しています。Couchbase Sync と Couchbase Server を使用したくないのは、これは今のところ小さな実験プロジェクトであり、チャネルは必要なく、サーバーには十分なリソースがありません。

私はCBL-Android 0.0.0-501(現在の最新のもので、すでに1.0.3を試したと思います)とCouchDB 1.5.0を使用しています。

これは、Android でのメイン アクティビティの onCreate メソッドで呼び出されます。

void minimalPushTest() throws IOException, CouchbaseLiteException {
    String databaseName = "cblpushtest";
    String couchDbUrl = "http://192.168.4.11:5984";
    String userName = "testuser";
    String userPw = "testpw";

    // initialize database
    Manager manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS);
    Database database = manager.getDatabase(databaseName);
    Document document = database.createDocument();
    Map<String, Object> data = new HashMap<String, Object>();
    data.put("somekey", "sometext");
    document.putProperties(data);

    // start push replication
    Replication replication = database.createPushReplication(new URL(couchDbUrl));
    replication.setContinuous(false);
    replication.setAuthenticator(new BasicAuthenticator(userName, userPw));
    replication.start();
}

これは、ユーザー "testuser" の "/_session" について CouchDB が言っていることです。

{"ok":true,"name":"testuser","roles":["testing"]}

...そして「/cblpushtest/_security」の場合:

{"admins":{"names":[],"roles":[]},"members":{"names":["testuser"],"roles":["testing"]}}

Android Studio での logcat 出力は次のとおりです。

03-15 23:15:14.999  27429-27429/ W/Sync﹕ [fireTrigger()] => START
03-15 23:15:15.109  27429-27429/ W/Sync﹕ [fireTrigger()] => GO_ONLINE
03-15 23:15:15.199  27429-27546/ E/Sync﹕ com.couchbase.lite.replicator.ReplicationInternal$4@429cbb20 checkSessionAtPath() response: {ok=true, userCtx={name=testuser, roles=[testing]}, info={authentication_db=_users, authentication_handlers=[oauth, cookie, default], authenticated=default}}
03-15 23:15:15.309  27429-27546/ W/Sync﹕ com.couchbase.lite.replicator.ReplicationInternal$9@4291cab0: error getting remote checkpoint
03-15 23:15:15.309  27429-27546/ E/Sync﹕ com.couchbase.lite.replicator.PusherInternal@429c1758: Progress: set error = org.apache.http.client.HttpResponseException: Bad Request
03-15 23:15:15.309  27429-27546/ W/Sync﹕ [fireTrigger()] => STOP_GRACEFUL
03-15 23:15:15.314  27429-27562/ W/Sync﹕ [fireTrigger()] => WAITING_FOR_CHANGES
03-15 23:15:15.314  27429-27562/ W/Sync﹕ [fireTrigger()] => STOP_IMMEDIATE

どういうわけか「ok=true」の応答がエラーとして表示されます。

そして、これはcouch.logです(クロックは同期していないようですが、これらは関連する出力です):

[Sun, 15 Mar 2015 22:14:32 GMT] [info] [<0.29026.2>] 192.168.4.61 - - GET /_session 200
[Sun, 15 Mar 2015 22:14:32 GMT] [info] [<0.29024.2>] 192.168.4.61 - - GET /_local/3e7d908842481392245906438560f235e9d3138f 400
4

1 に答える 1

2

データベースの URL は、CouchDB ルートだけでなく、実際のデータベースを指す必要があります。以前にテストしたと思っていましたが、その時点ではまだ認証の問題があったと思うので、そのソリューションを却下するのが早すぎました.

したがって、couchDbUrl の正しい行は次のとおりです。

String couchDbUrl = "http://192.168.4.11:5984/"+databaseName;

..おそらく同じ名前である必要さえありませんが、チェックしませんでした。とにかく、データがプッシュされます。

于 2015-03-17T15:58:51.990 に答える