Skip to content

Instantly share code, notes, and snippets.

@nz
Last active July 10, 2023 21:35
Show Gist options
  • Save nz/1282013 to your computer and use it in GitHub Desktop.
Save nz/1282013 to your computer and use it in GitHub Desktop.
Sunspot with Resque
# app/models/post.rb
class Post
searchable :auto_index => false, :auto_remove => false do
text :title
text :body
end
after_commit :resque_solr_update, :if => :persisted?
before_destroy :resque_solr_remove
protected
def resque_solr_update
Resque.enqueue(SolrUpdate, self.class.to_s, id)
end
def resque_solr_remove
Resque.enqueue(SolrRemove, self.class.to_s, id)
end
end
# lib/jobs/solr_update.rb
class SolrUpdate
@queue = :solr
def self.perform(classname, id)
classname.constantize.find(id).solr_index
end
end
# lib/jobs/solr_remove.rb
class SolrRemove
@queue = :solr
def self.perform(classname, id)
Sunspot.remove_by_id(classname, id)
end
end
@leoromanovsky
Copy link

What do you think of adding this at the end of the Resque jobs, for specs and local development to work somewhat serially?

unless Rails.env.production?
  Sunspot.commit
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment