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)
它确实会安排作业,但仅限于第一次。当谈到第二次时,由于某种原因,作业正在运行。