我正在使用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任务。怎么做?
答案 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。 “已安排的任务”的附加检查也必须。
希望它有所帮助。