【问题标题】:CouchDB won't delete existing databaseCouchDB 不会删除现有数据库
【发布时间】:2015-02-03 18:42:16
【问题描述】:

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

我正在设置一个测试框架,它将在开始时创建数据库的测试版本并在测试运行结束时将其删除,但我真的不想让框架 SSH 到服务器,如建议的那样这个答案Delete couchDB databases

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

$ curl -X PUT http://dbserver:5984/test
{"ok":true}
$ curl -X DELETE http://dbserver:5984/test
{"error":"not_found","reason":"missing"}

基于 CouchDB 文档,该文档是删除数据库的正确 URL。我禁用了 SELinux,但没有任何效果。没有启用 CouchDB 安全性,所有设置都保留为默认值。

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

【问题讨论】:

  • 在创建时尝试添加 /。旧文档指出:“数据库必须以所有小写字母 (a-z)、数字 (0-9) 或任何 _$()+-/ 字符命名,并且必须以 URL 中的斜杠结尾。”如果这可以解决您的问题,我不是,但这就是我在我的图书馆中所做的。有时可能会发生,当您太快地创建然后删除同一个数据库时,会出现错误。
  • 不幸的是,这不起作用。我还将 PUT / DELETE 命令间隔超过 30 秒。尝试在两个命令上使用和不使用斜线。一样的回应。我还尝试了两个连续的 PUT,第二个产生了数据库已经存在的响应。 DELETE 然后说它没有。
  • 您是否测试过您的安装? dbserver:5984/_utils/verify_install.html
  • 是的,我已经运行了测试,但它失败并出现 enoent 错误。在开发模式下下载并构建源文件,删除工作正常。怀疑生产服务器上的权限问题。学习了足够多的 Erlang 来尝试跟踪源代码以找到删除处理程序并添加调试输出,但它被深埋在 Erlang 库源代码的某个地方。在这一点上,我没有更多时间专注于这个问题,因为我没有绑定到 CouchDB 平台,所以我已经切换到 MongoDB。我感谢所有的回应。谢谢。
  • 我编辑了问题以包含有关“验证您的安装”失败的注释以及我收到相同错误时得到的日志文件。

标签: couchdb


【解决方案1】:

问题似乎是缺少 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

here

在 Fedora #1098802 中已经报告了一个针对 CouchDB 的错误

【讨论】:

  • 太棒了!谢谢! (为什么我没有想到这一点?;-)) 给遇到此问题的其他人的一些说明。 1) setenforce 0 将 SELinux 设置为允许,setenforce 1 将 SELinux 设置为强制。 2) 在你弄乱 SELinux 之后,你必须重新启动 CouchDB 才能使事情生效。 3) audit2allow 不在最小安装中,但在 policycoreutils-python 包中。
  • 这里的另一个注意事项:经过更多的摆弄后,我发现还有其他一些事情:1)添加第二个管理员用户似乎有一些 SELinux 问题(也许第一个有问题,但我错过了,我不确定)。这意味着您需要在 SELinux 处于许可模式时创建管理员。 2) 同样,在许可模式下创建一个运行视图以捕获这些错误。 3) grep couchdb 的搜索限制太大(换句话说,in 不会捕获 couchjs 中的错误以获取视图。而是 grep couch
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
相关资源
最近更新 更多