I am trying to get a Ruby on Rails application running on Ubuntu. It utilizes Xapian in order to search for documents. I already installed the xapian-full Gem in version 1.1.3.4 as instructed by the Gemfile and I created the directory files/default where the Xapian database will probably be.
database = Xapian::Database.new('files/default');
As soon as the code runs into this line, there is an error:
IOError in SearchController#index
DatabaseOpeningError: Couldn't detect type of database
Do I need to initialize the database or something? I looked the Xapian Docs and I searched for the error message on the internet, but none of this really helped.
(Writing this answer with knowledge of Xapian, but not the xapian-full Gem, so it's possible some details may be wrong - but the error comes from Xapian, so I'm pretty sure this is on the right lines.)
The error is because you created the directory
files/default. Instead, just create thefilesdirectory, and ensure the process running Xapian has permission to write to that directory.Why does Xapian raise an error here? Well, it's because Xapian databases consist simply of a directory containing a special set of files. When
Xapian::Database.newis called, it checks if the database already exists before creating a new one. In the default opening mode, if the database directory already exists, it assumes that it shouldn't overwrite whatever's there with a new database, so it tries to open the existing database. Because the directory is just empty, this throws the error you see.