Ruby 在sidekiq worker类中有多个方法

Ruby 在sidekiq worker类中有多个方法,ruby,ruby-on-rails-3,sidekiq,Ruby,Ruby On Rails 3,Sidekiq,我有一个sidekiq工人班。我目前是这样实现的。它在我调用进程时工作,它将对名为PERFORM的方法进行排队。但我希望有不止一种方法可以排队 作为旁注,这样做和简单地做socialshare.delay.perform有区别吗 # I trigger by using SocialSharer.process("xxx") class SocialSharer include Sidekiq::Worker def perform(user_id) # does thin

我有一个sidekiq工人班。我目前是这样实现的。它在我调用进程时工作,它将对名为PERFORM的方法进行排队。但我希望有不止一种方法可以排队

作为旁注,这样做和简单地做socialshare.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
#我使用SocialSharer.process(“xxx”)触发
社会共享阶级
包括Sidekiq::Worker
def执行(用户id)
#做事
结束
执行其他任务
#我不知道怎么触发这个
结束

classSocialSharer.delay.perform将延迟名为perform的类方法。您的perform方法是一个实例方法

工人被设计为每个工作一个班。作业通过执行方法启动。您可以使用delay在一个类上启动任意数量的不同类方法,如下所示:

class Foo
  def self.a(count)
  end
  def self.b(name)
  end
end
Foo.delay.a(10)
Foo.delay.b('bob')
好的,如果您真的想在一个类中拥有所有“可执行”的方法,我建议您将
perform
方法重命名为不同的方法(例如,
perform\u 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

我是否仍然可以从延迟调用的方法内部访问rails环境?这可以通过延迟的作业来完成,如何使用Sidekiq实现同样的操作?