Rails中的多时区任务调度(随时使用)

时间:2016-08-01 12:38:33

标签: ruby-on-rails cron timezone scheduled-tasks whenever

我们目前正在使用'在Rails项目中安排作业。系统正在扩展以支持多个时区的用户(时区存储在用户模型中),我们希望在其特定时间向用户发送电子邮件。

关于实现这一目标的最佳模式的任何想法?我预测24(或更多 - 有半个时区)'每当'每个电子邮件作业的任务,每个任务在用户表上都有不同的时区过滤器。

有关更清洁解决方案的想法吗?比任何时候都更好的调度程序?什么会创建24/48 cronjobs并调用回调传递时区或UTC偏移?这样的事情。

1 个答案:

答案 0 :(得分:1)

我不熟悉'每当'但我遇到了类似的挑战并使用了clockwork

我的问题是我必须在午夜为每个客户运行一个流程。和你一样,我的客户可以在世界任何地方,所以它必须在午夜时分运行。

在午夜运行工作的过程看起来像这样:

TZInfo::Timezone.all_country_zone_identifiers.each do |zone|                                                                                                                                                                                               
  every(1.day, {time_zone: zone}, at: '00:00', tz: "#{zone}") do |job_attr|                                                                                                                                  
    time_zone = job_attr[:time_zone]                                                                                                                                                                                   
    YourJob.perform_later(time_zone)                                                                                                                                                                                           
  end                                                                                                                                                                                                                                    
end

' YourJob'我会用那个time_zone找到我的所有客户并完成一份工作。

希望有所帮助。