diff options
-rw-r--r-- | vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb index d45308fec..1e5df8de4 100644 --- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb +++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb @@ -711,6 +711,9 @@ module ActsAsXapian # We fork here, so each batch is run in a different process. This is # because otherwise we get a memory "leak" and you can't rebuild very # large databases (however long you have!) + + ActiveRecord::Base.connection.disconnect! + pid = Process.fork # XXX this will only work on Unix, tough if pid Process.waitpid(pid) @@ -718,11 +721,10 @@ module ActsAsXapian raise "batch fork child failed, exiting also" end # database connection doesn't survive a fork, rebuild it - ActiveRecord::Base.connection.reconnect! else - # fully reopen the database each time (with a new object) # (so doc ids and so on aren't preserved across the fork) + ActiveRecord::Base.establish_connection @@db_path = ActsAsXapian.db_path + ".new" ActsAsXapian.writable_init STDOUT.puts("ActsAsXapian.rebuild_index: New batch. #{model_class.to_s} from #{i} to #{i + batch_size} of #{model_class_count} pid #{Process.pid.to_s}") if verbose @@ -738,6 +740,8 @@ module ActsAsXapian Kernel.exit! 0 end + ActiveRecord::Base.establish_connection + end end end |