aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfrancis <francis>2009-01-23 17:09:44 +0000
committerfrancis <francis>2009-01-23 17:09:44 +0000
commitfa13a21ad91f33ae0915b3911f59320ed2c579c2 (patch)
tree38e5d6eaf4f512e452d462187ed15921d44d5b82
parent8ac47eb7ed92a94e55111ae5b1db820f559089bb (diff)
From github
-rw-r--r--vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb28
1 files changed, 17 insertions, 11 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 dde18b091..47a50e1b6 100644
--- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
+++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
@@ -516,17 +516,23 @@ module ActsAsXapian
ActiveRecord::Base.transaction do
job = ActsAsXapianJob.find(id, :lock =>true)
STDOUT.puts("ActsAsXapian.update_index #{job.action} #{job.model} #{job.model_id.to_s}") if verbose
- if job.action == 'update'
- # XXX Index functions may reference other models, so we could eager load here too?
- model = job.model.constantize.find(job.model_id) # :include => cls.constantize.xapian_options[:include]
- model.xapian_index
- elsif job.action == 'destroy'
- # Make dummy model with right id, just for destruction
- model = job.model.constantize.new
- model.id = job.model_id
- model.xapian_destroy
- else
- raise "unknown ActsAsXapianJob action '" + job.action + "'"
+ begin
+ if job.action == 'update'
+ # XXX Index functions may reference other models, so we could eager load here too?
+ model = job.model.constantize.find(job.model_id) # :include => cls.constantize.xapian_options[:include]
+ model.xapian_index
+ elsif job.action == 'destroy'
+ # Make dummy model with right id, just for destruction
+ model = job.model.constantize.new
+ model.id = job.model_id
+ model.xapian_destroy
+ else
+ raise "unknown ActsAsXapianJob action '" + job.action + "'"
+ end
+ rescue ActiveRecord::RecordNotFound => e
+ # this can happen if the record was hand deleted in the database
+ job.action = 'destroy'
+ retry
end
job.destroy