Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save UnderpantsGnome/956075 to your computer and use it in GitHub Desktop.

Select an option

Save UnderpantsGnome/956075 to your computer and use it in GitHub Desktop.

Revisions

  1. UnderpantsGnome created this gist May 4, 2011.
    41 changes: 41 additions & 0 deletions queue_failure_session_proxy.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,41 @@
    require 'sunspot/session_proxy/silent_fail_session_proxy'

    module Sunspot
    module SessionProxy
    class QueueFailureSessionProxy < Sunspot::SessionProxy::SilentFailSessionProxy
    QUEUE_METHODS = [:index!, :index, :remove!, :remove]

    def rescued_exception(method_name, ex, klass)
    raise ex unless ::Rails.env.production?

    if klass && QUEUE_METHODS.include?(method_name)
    HoptoadNotifier.notify(
    :error_class => "Solr Exception",
    :error_message => "Solr Exception: #{ex.message}",
    :parameters => { :model => klass, :method => method_name }
    ) if defined?(HoptoadNotifier)

    klass.delay.index! if method_name.to_s.match('index')
    klass.delay.remove_from_index! if method_name.to_s.match('remove')
    else
    raise ex
    end
    end

    SUPPORTED_METHODS.each do |method|
    module_eval(<<-RUBY)
    def #{method}(*args, &block)
    begin
    search_session.#{method}(*args, &block)
    rescue => ex
    self.rescued_exception(:#{method}, ex, args.first)
    end
    end
    RUBY
    end

    end
    end
    end

    Sunspot.session = Sunspot::SessionProxy::QueueFailureSessionProxy.new(Sunspot.session)