检索其中的sidekiq工人的计划日期

时间:2018-09-04 09:46:19

标签: ruby-on-rails ruby sidekiq

在某个日期my_date上有很多作业排队。

在同一天,有很多工作要做,以至于有些人在排定的日期之后仅20分钟就可以工作。

一旦进入perform方法,如何获取该预定日期?

ps:我不能将此Scheduled_date作为参数传递,因为它是Cron工作(而且我只能传递静态参数)

ps2:github问题https://github.com/mperham/sidekiq/issues/3945

edit:目前,这是部分答案,仍然不令人满意(例如,无法进行重试):

# wait for Sidekiq::Workers to be updated (5 sec)
sleep 8
the_exact_date = Time.at(Sidekiq::Workers.new.find { |_, __, w| w["payload"]["jid"] == jid }[2]["run_at"])

编辑2:sidekiq cron的当前PR完全解决了我的问题:https://github.com/ondrejbartas/sidekiq-cron/pulls

2 个答案:

答案 0 :(得分:0)

似乎有一个enqueued_at强制性参数传递给了工作,这正是您所需要的。

如果您要查找作业的开始时间,则只需在Perform方法的开始处插入Time.current

有关官方文档,请参见https://github.com/mperham/sidekiq/wiki/Job-Format#job

答案 1 :(得分:0)

如果你使用 Sidekiq-cron :

我提交了一个 PR 并且它被接受了。解决方案是在初始化 sidekiq-cron 作业时使用可选的 date_as_argument 参数:

https://github.com/ondrejbartas/sidekiq-cron#getting-started