如何异步调用after_commit(sunspot注入)

时间:2015-11-05 07:49:45

标签: ruby-on-rails sunspot

我正在使用带有轨道的太阳黑子。 我知道太阳黑子会使用after_commit钩子来重新索引...... 但是,如果after_commit失败,则事务将回滚,并且我要保存的Account(ActiveRecord::Base)将被删除。

我想使用sidekiq,perform_async来调用after_commit挂钩,但不知道我该怎么做。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

    module Reindex
      extend ActiveSupport::Concern

      def async_reindex
        AsyncIndexJob.perform_later(self.class.to_s, self.reload.id)
      end

      included do
        after_save :async_reindex
      end
    end

    class AsyncIndexJob < ActiveJob::Base
      queue_as :index

      def perform(*args)
        obj = args[0].constantize.find_by_id(args[1])
        if obj
          Sunspot.index obj
          Sunspot.commit
        end
      end
    end

1.包含ActiveRecord :: Base中的Reindex模块

2.set:auto_index =&gt;假

3.allall

AsyncIndex