我使用couchdb的PHP lib添加视图:
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中,我查看了它的doc以确认它已创建:
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传递的字符串编码问题?
答案 0 :(得分:3)
“eacces”表示存储数据库的目录的权限或所有权存在问题。
对于每个数据库,数据库服务器将创建一个名为.<db_name>_design
的子目录,其中包含该数据库中每个设计文档的文件。您的CouchDB实例运行的用户很可能没有创建该目录的权限,也可能是其中的文件。
检查您的数据库所在的目录及其下的所有内容是否由您的CouchDB运行的用户拥有,并且目录和文件具有合理的权限。如果您是从源安装的,那么它是/ usr / local / var / lib / couchdb,但如果您使用了包,则可能会有所不同。
答案 1 :(得分:0)
php的字符编码存在一些问题。在curl中运行完全相同的查询是成功的,然后视图能够正常运行