1

ビューを追加するためにcouchdbのPHPライブラリを使用しました。

public function addView() {
    $design_doc = new stdClass();
    $design_doc->_id = '_design/need';
    $design_doc->language = 'javascript';
    $design_doc->views = array( 'all' => array('map' => "function(doc) { if (doc.type == 'need')  emit(doc.type, doc) }" ) );
    $result = $this->client->storeDoc($design_doc);
    return $result;
}

私のシェルでは、ドキュメントを表示して、作成されたことを確認しました。

curl -X GET mysite.com/bids/_design/need
{
  "_id":"_design/need",
  "_rev":"1-0ed4b41b839ade9ca36fb950cac1c39b",
  "language":"javascript",
  "views":
    {
      "all":
        {
          "map":"function(doc) { if (doc.type == 'need')  emit(doc.type, doc) }"
        }
    }
}

次に、実際にビューを実行しようとすると、eaccesエラーがスローされます。

curl -X GET mysite.com/bids/_design/need/_view/all
{
  "error":"error","reason":"eacces"
}

権限:インスタンスはrootとして実行されています。

ビュークエリを実行するために間違った構文を使用していますか?

PHPを介して渡された文字列のエンコードに問題がある可能性がありますか?

4

2 に答える 2

3

「eacces」は、データベースが保存されているディレクトリの権限または所有権に問題があることを示しています。

データベースごとに、データベースサーバーは、そのデータベース内.<db_name>_designの各設計ドキュメントのファイルを含むというサブディレクトリを作成します。CouchDBインスタンスを実行しているユーザーには、そのディレクトリまたはその中にファイルを作成する権限がない可能性があります。

データベースが存在するディレクトリとその下にあるすべてのものが、CouchDBを実行しているユーザーによって所有されていること、およびディレクトリとファイルに適切な権限があることを確認してください。ソースからインストールした場合は/usr/ local / var / lib / couchdbですが、パッケージを使用した場合はおそらく異なるでしょう。

于 2012-04-06T09:32:07.703 に答える
0

phpによる文字エンコードに問題がありました。curlでまったく同じクエリを実行すると成功し、ビューを正しく実行できるようになりました

于 2012-04-09T21:36:33.707 に答える