Sidekiq 在稍后的时间点安排工作人员

use*_*519 5 ruby ruby-on-rails sidekiq ruby-on-rails-4

我们有一个类似的问题Sidekiq schedule same worker to queue when done

问题的关键在于,如果将多个参数传递给perform_in it does not schedule them for later, but processes them as usual.

这按预期工作,但没有用,因为没有参数传递到新作业中

def perform(id, mode)
  begin
    Some::Process.remediate(App.find(id), mode)
  rescue CustomErrors::MyError => e
    # This will schedule a job, but without arguments :(
    self.class.perform_in(2.hours)
  end
end
Run Code Online (Sandbox Code Playgroud)

这很有用,但无法按预期工作 作业完成并且没有重新安排任何内容

def perform(id, mode)
  begin
    Some::Process.remediate(App.find(id), mode)
  rescue CustomErrors::MyError => e
    # This does not schedule a job
    self.class.perform_in(2.hours, id, mode)
  end
end
Run Code Online (Sandbox Code Playgroud)

用过的:

Sidekiq 3.5.1
Rails 4.2.4
ruby 2.3.1p112
dev environment
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助

更新

当代码通过绑定运行时

binding.pry
self.class.perform_in(2.hours, 2, 12345)
Run Code Online (Sandbox Code Playgroud)

它确实会安排作业,但仅限于第一次。当谈到第二次时,由于某种原因,作业正在运行。