【问题标题】:Scheduling tasks by reading time of execution from database instead of code通过从数据库而不是代码读取执行时间来调度任务
【发布时间】:2026-01-13 06:40:01
【问题描述】:

我正在寻找 ruby​​ 中的流程,通过它我可以在某些特定时间每天运行任务。我想在某个表中添加一个新任务,在某个列中指定时间,并且该任务应该每天安排,因为该行已添加到表中。我知道 gem 'whenever' 用于调度,但只要我需要在 schedule.rb 中指定时间,它就需要代码部署。有没有可能我想做的事?

【问题讨论】:

  • 您是否能够访问和使用 rails 控制台来设置作业?还是您必须直接更新数据库并让 gem 检测到更改?
  • @Tom 假设我有一个规则需要在某个时间触发。所以我想要的是我可以在规则表中添加一个规则,在触发器表中添加一个触发器以在每天下午 6 点执行该规则。 gem 会自动检测新触发器并开始每天安排它。

标签: ruby-on-rails ruby cron whenever ice-cube


【解决方案1】:

我认为你可以使用crone gem 这纯粹是用 ruby​​ 编写的,你不需要像 gem 一样设置 cron 作业。 但它是如何工作的 cron 在 linux 中

安装步骤:

gem 'crono'
rails generate crono:install
rake db:migrate # to install it's table

您可以与活动作业合并

class TestJob # This is not an Active Job job, but pretty legal Crono job.
  def perform(*args)
    # put you scheduled code here
    # Comments.deleted.clean_up...
  end
end

并按照以下方式进行调度(无需从 OS / cron 设置)

# config/cronotab.rb
Crono.perform(TestJob).every 2.days, at: {hour: 15, min: 30}
Crono.perform(TestJob).every 1.week, on: :monday, at: "15:30"

【讨论】: