【问题标题】:mysterious running time for delayed job延迟工作的神秘运行时间
【发布时间】:2015-12-04 17:41:14
【问题描述】:

我正在使用我的 Rails 应用程序上的 delayed_job。这是我的代码:

run_at = 4.hours.from_now
# run_at is actually a calculation according to timezone and other stuff
MyModel.delay(run_at: run_at).create(some_params)

神秘地,昨天晚上,我的工作直接开始了。这意味着两件可能的事情:

  1. run_at 基本上是now 或过去。
  2. DelayedJob 模型确实造成了延迟。

我检查了 3 次计算。昨天晚上run_at 不等于now

这个问题在昨天大约同一小时半发生了 4 次。 实际上是 2 次 2 次糟糕的延迟任务。

仅供参考:我昨天晚上没有重新启动我的服务器。

DelayedJob 有没有可能挤占了我的跑步时间?

编辑 我检查了我的数据。我已经存储了假定开始工作的确切时间。那是过去……我的错。

【问题讨论】:

  • 您是在实际生产日志中查看计算结果还是仅查看代码?服务器可能设置了不同的时区或已废弃 tzdata
  • 我现在检查了它。我没有找到任何关于 DelayedJob 创建的文本。但是存储在我的数据库中的数据告诉它已经被延迟了......在调用该方法的确切时间(h:m:s)。是否可以在没有看到任何 DelayedJob 创建的数据库行的情况下调用 run_at?时区在我的生产服务器上没问题。我查过了。
  • 对数据库的查询记录在:debug日志级别,在生产中默认是:info,所以这是正常的

标签: ruby-on-rails delayed-job


【解决方案1】:

我的错,任务应该在过去运行 (​​run_at now)。这就是为什么它立即开始。

【讨论】: