用于时区的Rufus-scheduler变量 - 轨道上的ruby

时间:2011-09-02 05:59:22

标签: ruby-on-rails ruby rufus-scheduler

我正在运行一个使用rufus-scheduler的rails应用程序在中午向所有用户发送每日电子邮件,但是,它目前正在中午发送给应用时区“台北”。

我在注册时捕获用户时区,但我无法将变量放入rufus-scheduler任务

scheduler.cron('0 15 * * * @time_zone') do
  Account.all.each do |account|
    CODE
    account.users.each do |user|
      DELIVER EMAIL CODE
    end
  end
end

我想我只是不确定在哪里定义@time_zone变量,以便rufus能够正确读取它。

提前致谢!

2 个答案:

答案 0 :(得分:3)

调度程序不需要关心时区,最好不要考虑UTC。您想要做的是每小时运行一次任务,只查找当前午夜的帐户。所以你的代码看起来更像是这样:

scheduler.cron('0 * * * *') do
  tz = THE TIMEZONE WHERE IT IS NOW MIDNIGHT
  Account.where(:timezone => tz).each do |account|
    CODE
    account.users.each do |user|
      DELIVER EMAIL CODE
    end
  end
end

答案 1 :(得分:2)

scheduler.cron("0 15 * * * #{@time_zone}") do
  # ...
end

和rufus-scheduler README说

  

时区是'tzinfo'rubygem(https://github.com/tzinfo/tzinfo)支持的时区。