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;
}

在我的 shell 中,我查看了它的文档以确认它已创建:

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 回答