0

我正在尝试在 Ubuntu 上运行 Ruby on Rails 应用程序。它利用 Xapian 来搜索文档。我已经按照 Gemfile 的指示安装了xapian-fullGem 版本,并创建了 Xapian 数据库可能所在的目录。1.1.3.4files/default

database = Xapian::Database.new('files/default');

一旦代码运行到这一行,就会出现错误:

SearchController#index 中的 IOError

DatabaseOpeningError:无法检测数据库类型

我需要初始化数据库还是什么?我查看了 Xapian Docs 并在互联网上搜索了错误消息,但这些都没有真正帮助。

4

1 回答 1

0

(用 Xapian 的知识写这个答案,但不是 xapian-full Gem,所以一些细节可能是错误的 - 但错误来自 Xapian,所以我很确定这是正确的。)

错误是因为您创建了目录files/default。相反,只需创建files目录,并确保运行 Xapian 的进程有权写入该目录。

为什么 Xapian 会在此处引发错误?嗯,这是因为 Xapian 数据库只包含一个包含一组特殊文件的目录。当Xapian::Database.new被调用时,它会在创建新数据库之前检查数据库是否已经存在。在默认打开模式下,如果数据库目录已经存在,它假定它不应该用新数据库覆盖那里的任何内容,因此它会尝试打开现有数据库。因为目录只是空的,这会引发您看到的错误。

于 2012-05-17T01:47:56.937 回答