class AvailabilityIndexerWorker include Sidekiq::Worker sidekiq_options queue: 'elasticsearch', retry: true Logger = Sidekiq.logger.level == Logger::DEBUG ? Sidekiq.logger : nil Client = Elasticsearch::Model.client def perform(operation, record_id) logger.debug [operation, "ID: #{record_id}"] case operation.to_s when /index/ begin record = Availability.find(record_id) Client.index index: Availability.index_name, type: Availability.document_type, id: record.id, body: record.as_indexed_json rescue ActiveRecord::RecordNotFound STDERR.puts "Availability id(#{record_id}) will not be indexed in ElasticSearch as it does not exists anymore in database" end when /delete/ begin Client.delete index: Availability.index_name, type: Availability.document_type, id: record_id rescue Elasticsearch::Transport::Transport::Errors::NotFound STDERR.puts "Availability id(#{record_id}) will not be deleted form ElasticSearch as it has not been already indexed" end else raise ArgumentError, "Unknown operation '#{operation}'" end end end