2017-06-12 17 views
0

リモートソースから自身を更新するブラウザDBに対してローカルにしたいと考えています。これを解決するためにpouchdb/cloudantを使用しようとしています。リモートDBは多くのクライアントで使用されるため、読み取り専用で認証は必要ありません。私は、次のしている私のセットアップコードでリモートpouchdbの読み取り専用レプリケーション

{"cloudant":{"admin_user":["_writer","_admin","_replicator","_reader"],"nobody":["_reader"],"apiKey":["_writer","_admin","_replicator","_reader"]}} 

:次のようにcloudantに関連するデシベル(例えば「remotedbによって」)のための私の権限の設定がある

var localDB = new PouchDB('local'); 
var remoteDB = new PouchDB('https://account.cloudant.com/remoteDB'); 

localDB.replicate.from(remoteDB, {live: false}).on('change', function (change) { 
    console.log("change", change); 
}).on('error', function (err) { 
    console.log("err-replicate", err); 
}); 

ロードするときに、私は401不正エラーを取得していますこれを含むページこのためPUT要求であるせる要求:

https://account.cloudant.com/remoteDB/_local/JqXQso2dZEjdZsU1e_2Qxw==

ヘッダのparamsは次のとおり

  • _id:_local/JqXQso2dZEjdZsU1e_2Qxwの==
  • last_seq: "0"

このデータベースのクラウドにnobodyのユーザーがいると、ライターのアクセス権が失われます。何がここに間違っているアイデアですか?

これは、リモートソースから一方向レプリケーションを行う正しい方法ですか?

+0

修正プログラムのようなものが_replicator権限をnobodyユーザーに追加することができます –

答えて

1

表示されるエラーは、PouchDBがリモートのCloudantデータベースに「チェックポイント」ドキュメントを書き込もうとしていることです。チェックポイントは、リビジョンのタイムラインでクライアントがどこに到達したかを示し、中断した場所から再開できるように、将来のレプリケーションをより効率的にします。

読み取り専用レプリケーションでこの問題を解決する方法は、ユーザー(または全員)に対して "_reader" & "_replicator"アクセス許可が与えられていると正確に推測します。 _replicatorアクセス​​許可を使用すると、ローカルドキュメントのみが書き込まれ、コアドキュメント自体は書き込まれません。これにより、チェックポイント文書を保存し、PouchDBがエラーなく処理できるようになります。

関連する問題