Browse Source

Implement sunspot-queue

rails-credentials-and-worker
Angel Aviel Domaoan 4 years ago committed by Angel Aviel Domaoan
parent
commit
412887e56e
  1. 26
      config/initializers/sidekiq.rb
  2. 16
      config/initializers/sunspot.rb
  3. 13
      lib/sunspot/queue/active_job.rb
  4. 30
      lib/sunspot/queue/active_job/backend.rb
  5. 14
      lib/sunspot/queue/active_job/index_job.rb
  6. 14
      lib/sunspot/queue/active_job/removal_job.rb

26
config/initializers/sidekiq.rb

@ -0,0 +1,26 @@
module SidekiqAddOns
def flushdb
Sidekiq.redis(&:flushdb)
end
end
Sidekiq.send(:extend, SidekiqAddOns) unless Sidekiq.respond_to?(:flushdb)
opts = {}
opts[:url] = ENV["REDIS_URL"] if ENV.key?("REDIS_URL")
if opts.key?(:url)
Sidekiq.configure_server do |config|
config.redis = opts
end
Sidekiq.configure_client do |config|
config.redis = opts
end
ActiveJob::Base.queue_adapter = :sidekiq unless Rails.env.test?
end
Sidekiq.default_worker_options = {
unique: :until_executing,
unique_args: ->(args) { args.first.except("job_id") }
}

16
config/initializers/sunspot.rb

@ -0,0 +1,16 @@
require "sunspot"
require "sunspot/queue/session_proxy"
require "sunspot/queue/active_job"
Sunspot::Queue::SessionProxy.class_eval do
def commit_if_dirty(_ = false); end
def commit_if_delete_dirty(_ = false); end
def commit(_ = false); end
end
Sunspot::Rails.configuration.instance_variable_get("@user_configuration")["auto_index_callback"] = "after_commit"
backend = Sunspot::Queue::ActiveJob::Backend.new
Sunspot.session = Sunspot::Queue::SessionProxy.new(Sunspot.session, backend)

13
lib/sunspot/queue/active_job.rb

@ -0,0 +1,13 @@
require "sunspot/queue"
module Sunspot::Queue
module ActiveJob
require "sunspot/queue/active_job/backend"
require "sunspot/queue/active_job/index_job"
require "sunspot/queue/active_job/removal_job"
end
end
# Backwards compatability with 0.9.x. Will be removed by 1.0 / 0.11.
::Sunspot::Queue::IndexJob = ::Sunspot::Queue::ActiveJob::IndexJob
::Sunspot::Queue::RemovalJob = ::Sunspot::Queue::ActiveJob::RemovalJob

30
lib/sunspot/queue/active_job/backend.rb

@ -0,0 +1,30 @@
require "active_job"
require "sunspot/queue/active_job/index_job"
require "sunspot/queue/active_job/removal_job"
module Sunspot::Queue::ActiveJob
class Backend
attr_reader :configuration
def initialize(configuration = Sunspot::Queue.configuration)
@configuration = configuration
end
def index(klass, id)
index_job.perform_later(klass, id)
end
def remove(klass, id)
removal_job.perform_later(klass, id)
end
private
def index_job
configuration.index_job || ::Sunspot::Queue::ActiveJob::IndexJob
end
def removal_job
configuration.removal_job || ::Sunspot::Queue::ActiveJob::RemovalJob
end
end
end

14
lib/sunspot/queue/active_job/index_job.rb

@ -0,0 +1,14 @@
require "sunspot/queue/helpers"
module Sunspot::Queue::ActiveJob
class IndexJob < ApplicationJob
extend ::Sunspot::Queue::Helpers
queue_as :sunspot_index
def perform(klass, id)
self.class.without_proxy do
self.class.constantize(klass).find(id).solr_index
end
end
end
end

14
lib/sunspot/queue/active_job/removal_job.rb

@ -0,0 +1,14 @@
require "sunspot/queue/helpers"
module Sunspot::Queue::ActiveJob
class RemovalJob < ApplicationJob
extend ::Sunspot::Queue::Helpers
queue_as :sunspot_index
def perform(klass, id)
self.class.without_proxy do
::Sunspot.remove_by_id(klass, id)
end
end
end
end
Loading…
Cancel
Save