2

我正在运行一个使用 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 正确读取它。

提前致谢!

4

2 回答 2

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
于 2011-09-02T06:09:44.413 回答
2
scheduler.cron("0 15 * * * #{@time_zone}") do
  # ...
end

和 rufus-scheduler README 说

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

于 2011-09-03T07:14:11.897 回答