CouchDB赢得';不要删除现有数据库

CouchDB赢得';不要删除现有数据库,couchdb,Couchdb,我是CouchDB的新手,遇到了一个奇怪的问题。我可以创建数据库,但不能删除它 我正在设置一个测试框架,它将在开始时创建DB的测试版本,并在测试运行结束时将其删除,但我真的不想让框架SSH连接到服务器上,正如这个回答中所建议的那样 我的安装程序是CentOS 7(来自发布的最小映像),运行在Virtual Box 4.3中。我从EPEL存储库安装了CouchDB,版本报告为1.6.1。我可以用Futon管理数据库,创建数据库,添加和删除文档。删除Futon中的DB将挂起。使用curl删除返回40

我是CouchDB的新手,遇到了一个奇怪的问题。我可以创建数据库,但不能删除它

我正在设置一个测试框架,它将在开始时创建DB的测试版本,并在测试运行结束时将其删除,但我真的不想让框架SSH连接到服务器上,正如这个回答中所建议的那样

我的安装程序是CentOS 7(来自发布的最小映像),运行在Virtual Box 4.3中。我从EPEL存储库安装了CouchDB,版本报告为1.6.1。我可以用Futon管理数据库,创建数据库,添加和删除文档。删除Futon中的DB将挂起。使用curl删除返回404未找到

$ curl -X PUT http://dbserver:5984/test
{"ok":true}
$ curl -X DELETE http://dbserver:5984/test
{"error":"not_found","reason":"missing"}
基于CouchDB文档,这是删除DB的正确URL。我禁用了SELinux,但没有效果。没有启用CouchDB安全性,所有设置都保留默认设置


为什么我不能删除数据库?

问题似乎是缺少SELinux策略

Permissive
模式下运行SELinux,使“验证安装”检查对我有效。(CentOS 7,couchdb 1.6.1通过yum从EPEL存储库安装)

查看/var/audit/audit.log可以发现:

type=AVC msg=audit(1422956916.341:371): avc:  denied  { create } for  pid=2188 comm="beam" name=".test_suite_db_design" scontext=system_u:system_r:rabbitmq_beam_t:s0 tcontext=system_u:object_r:couchdb_var_lib_t:s0 tclass=dir
因此,SELinux拒绝了couchdb进程来创建该目录

使用
audit2allow
工具可以创建缺少的规则,可以使用
semodule
命令启用这些规则:

grep couchdb /var/log/audit/audit.log | audit2allow -M couchdbvarlib
semodule -i couchdbvarlib.pp


Fedora中已经报告了一个针对CouchDB的bug,请在创建它时尝试添加一个/。旧文档指出:“数据库必须使用所有小写字母(A-z)、数字(0-9)或任何$()+/字符命名,并且必须以URL中的斜杠结尾。”我不确定这是否可以解决您的问题,但这就是我在我的库中所做的。有时,当您创建并删除同一数据库的速度过快时,可能会发生错误。不幸的是,这不起作用。我还将PUT/DELETE命令间隔30秒以上。在两个命令上尝试使用和不使用斜杠。同样的回答。我还尝试了两次连续的PUT,第二次产生了DB已经存在的响应。然后删除说明没有。您测试过您的安装吗?是的,我已经运行了测试,它失败了,出现了一个enoint错误。在开发模式下下载并构建了源文件,删除工作正常。怀疑生产服务器上存在权限问题。学习了足够多的Erlang,可以尝试跟踪源代码以找到删除处理程序并添加调试输出,但它隐藏在Erlang库源代码的深处。现在,我没有更多的时间来讨论这个问题,因为我没有绑定到CouchDB平台,所以我已经切换到MongoDB。我感谢所有的答复。谢谢。我编辑了这个问题,包括了关于“验证你的安装”失败的注释,以及当我收到相同错误时得到的日志文件。太棒了!非常感谢。(为什么我没有想到这一点?;-)给其他有这个问题的人的一些提示。1)
setEnforce0
将SELinux设置为允许,
setEnforce1
将SELinux设置为强制。2) 在弄乱SELinux之后,您必须重新启动CouchDB才能使事情生效。3)
audit2allow
不在最小安装中,但它在
policycoreutils-python
软件包中。这里的另一个注意事项是:在做了一些修改之后,我发现还有一些其他问题:1)添加第二个管理员用户似乎存在一些SELinux问题(可能是第一个,我错过了,我不确定)。这意味着您需要在SELinux处于许可模式时创建管理员。2) 类似地,在许可模式下创建运行视图以捕获这些错误。3)
grep couchdb
对搜索的限制太大(换句话说,in不能捕获
couchjs
中的错误以获取视图。
grep coach