首页 > 解决方案 > ruby on rails 后台应用程序在用户动态定义的时间自动运行作业?

问题描述

我有一个用例,用户从 Web 界面安排“命令”。用户还指定需要触发命令的日期和时间。

这是一系列步骤:

1.用户在 5 月 31 日下午 3 点安排命令“重启设备”。

2.这保存在一个名为Command的数据库表中。

3.现在需要有一个后台作业需要在这个指定的时间触发来做某事(进行api调用,发送电子邮件等)

4.一旦作业被执行,它被移除或标记为完成,直到发出新的命令。

可能有多个用户同时执行上述步骤序列。

delay_job 是上面的一个不错的选择吗?我找不到如何使用延迟作业实现上述示例。

编辑:我查看delayed_job的原因是因为最终我需要利用现有的关系数据库

标签: ruby-on-railsrubydelayed-job

解决方案


我建议使用Sidekiq。有了它,您可以使用计划的作业来告诉 sidekiq 何时执行作业。

例子 : MyWorker.perform_at(3.hours.from_now, 'mike', 1)

编辑:工人示例

#app/workers/restart_device_worker.rb
class RestartDeviceWorker
  include Sidekiq::Worker

  def perform(params)
    # Do the job
    # ...
    # update in DB
  end
end


推荐阅读