= Xapit Sync
Rails plugin which extends Xapit to provide automatic syncing of the index.
For an alternative solution (currently vaporware) see Xapit Server.
http://github.com/ryanb/xapit-server/tree/master
== Installation
This plugin assumes you have a Rails application using Xapit. For more information see: http://github.com/ryanb/xapit/tree/master
Install the plugin and run migrations.
script/plugin install git://github.com/ryanb/xapit-sync.git rake db:migrate
That is all you need to get started in development, but you should see the customize portion below.
== How it Works
Xapit Sync is a Rails plugin designed to update only the Xapian records which have changed and then reload the database automatically.
Each time a Xapit member (model) is created, updated, or destroyed it will record that change in a separate database table.
A separate process will spawn (if it isn't already running) which updates the Xapian database with all changes recorded. At the end of this process it will trigger a Rails controller/action which is included in the plugin (using Rails metal and/or engines). This will notify the Rails application that the Xapian database needs to be reloaded.
== Customize
You will want to customize Xapit Sync to work with your application in production. It is best to do this at the bottom of the setup_xapit.rb initializer file.
If you have your own queuing system (such as delayed_job) it is better to use that instead of the built-in script runner.
class XapitSyncJob def perform XapitSync.sync end end
XapitSync.override_syncing do Delayed::Job.enqueue XapitSyncJob.new end
You can also disable the syncing process in certain environments. For example:
XapitSync.override_syncing { } unless Rails.env.production?
You'll likely want to customize which domains are triggered when the syncing finishes in order to reload the Xapian database.
XapitSync.domains = ["localhost:8000", "localhost:8001"] if Rails.env.production?
Unfortunately there is not yet a solution to trigger the reloading if you are using Passenger, so you should disable it in that case.
XapitSync.domains = [] if Rails.env.production?