3

私はsidekiqワーカークラスを持っています。私は現在、この方法で実装しています。PROCESSを呼び出すと機能し、PERFORMというメソッドをキューに入れます。ただし、キューに入れることができるメソッドが複数あります。

ちなみに、これを行うことと単にSocialSharer.delay.performを行うことには違いがありますか?

# I trigger by using SocialSharer.process("xxx")

class SocialSharer

  include Sidekiq::Worker

  def perform(user_id)
    # does things
  end

  def perform_other_things
    #i do not know how to trigger this
  end

  class << self
    def process(user_id)
      Sidekiq::Client.enqueue(SocialSharer,user_id)
    end
  end

end
4

2 に答える 2

7

SocialSharer.delay.performは、performというクラスメソッドを遅延させます。あなたのperformメソッドはインスタンスメソッドです。

労働者は、仕事ごとに1つのクラスになるように設計されています。ジョブはperformメソッドを介して開始されます。次のように、delayを使用して、クラスのさまざまなクラスメソッドをいくつでも開始できます。

class Foo
  def self.a(count)
  end
  def self.b(name)
  end
end
Foo.delay.a(10)
Foo.delay.b('bob')
于 2013-03-13T20:56:11.297 に答える
-3

さて、本当にすべての「実行可能な」メソッドを1つのクラスに入れたい場合は、performメソッドの名前を別の名前(たとえば)に変更し、制御フローをディスパッチperform_somethingする新しいperformメソッドを作成することをお勧めします。

class SocialSharer
  include Sidekiq::Worker

  # the 3 lines below may be replaced with `alias_method :perform, :public_send`
  def perform(method, *args)
    self.public_send(method, *args)
  end

  def perform_something(user_id)
    # does things
  end

  def perform_other_things
    # does other things
  end

  def self.process(user_id)
    Sidekiq::Client.enqueue(SocialSharer, :perform_something, user_id)
    Sidekiq::Client.enqueue(SocialSharer, :perform_other_things)
  end
end
于 2013-03-13T21:08:43.167 に答える