如何创建报告调度程序?

时间:2014-03-11 11:42:37

标签: ruby-on-rails ruby scheduled-tasks

用户可以选择(并不断编辑)他们希望接收特定报告的日期:

3 report options
7 possible days (Monday - Sunday)

如果用户可以在一周的任何一天或月末收到3份报告中的任何一份,那么将数据存储在数据库中的最佳方法是什么?

User 1's report schedule = report 1 monday and tuesday, report 2 monday, report 3 at the end of every month

我的第一个想法是使用Schedule模型并具有布尔值但很快就失控了:

Schedule model
attr_accessible  :report_one_monday, :report_one_tuesday, :report_one_wednesday, :report_one_thursday, :report_one_friday, :report_one_saturday, :report_one_sunday
:report_two_monday, :report_two_tuesday, :report_two_wednesday, :report_two_thursday, :report_two_friday, :report_two_saturday, :report_two_sunday
:report_three_monday, :report_three_tuesday, :report_three_wednesday, :report_three_thursday, :report_three_friday, :report_three_saturday, :report_three_sunday
:report_one_end_of_month etc

我想使用heroku调度程序每天运行一个rake任务,看看它必须发送哪些报告。月末任务看起来像是:

task :send_reports => :environment do
 if Date.today == Date.today.end_of_month
  Business.where(report_one_end_of_month: true).each do |business|
   MyMailer.send_month_end_report(business).deliver
  end
 end
end

1 个答案:

答案 0 :(得分:0)

查看resqueresque-scheduler这是一套超级的拒绝调度程序。

我们正在使用此工具在后台生成报告并长时间通过电子邮件发送给用户,这肯定会解决您的问题。

Resque是基于redis的工具,用于运行后台作业,而resque-scheduler当然是调度程序,它可以接受cron调度来安排将来的resque作业。