如何根据表列调度任务?

时间:2014-10-08 05:32:45

标签: ruby-on-rails ruby rake-task whenever

我正在使用gem来运行rake任务。我在schedule.rb中的代码如下。

 every 1.day, :at => '11:00 am' do
  rake "notifications:run_mailer"
 end

上面的代码是在每天上午11点执行rake任务。现在我想改变这个。我想基于表列运行此rake任务。为此我创建了一个名为scheduler.rb的表和一个列run_at。基于run_at列的日期和时间,我需要运行该rake任务。怎么做?

2 个答案:

答案 0 :(得分:2)

第1步:

首先我们必须加载schedule.rb中的所有文件然后我们才能执行ActiveRecord查询。

可以通过以下命令

完成
 require File.expand_path(File.dirname(__FILE__) + "/environment")

第2步:

执行ActiveRecord查询并获取时间。

  run_at=Scheduler.last.run_at
  time=[run_at.hour.to_s,run_at.min.to_s].join(":")
  every 1.day, :at => time do
    rake "notifications:run_mailer"
  end

第3步:

我们必须使用以下命令更新每当crontab。

 system "whenever --update-crontab"

system关键字用于在rails代码中运行linux终端命令。

答案 1 :(得分:1)

假设表名为Scheduler

Scheduler.find(:all).each { |scheduler|
  every 1.day, :at => scheduler.run_at do
    rake scheduler.task_to_run
  end 
}

请注意,此代码将在每次运行时添加cron任务。一段时间后,这将导致巨大数量的cronjobs。 “已安排的任务的附加检查也必须

希望它有所帮助。