【发布时间】:2015-02-18 06:36:25
【问题描述】:
我似乎总是很难理解这一点......
我让 Heroku 调度程序每 10m 运行一次,以寻找要运行的新计划作业,但它没有在我期望的时候运行 - 不同之处在于时区,但我不清楚我应该如何进行比较所以它按我预期的方式工作。
在我们的 rake 任务中:
schedules = Schedule.where('status in (?) and next_run < ?', ['new', nil, ''], DateTime.current)
在 application.rb 中是
config.time_zone = 'Auckland'
config.active_record.default_timezone = :local
现在,我刚刚看到的没有达到预期效果的确切示例是这样的:
- 新西兰的一位用户设置了 next_run 时间为 2 月 18 日星期三上午 10 点的时间表
- 根据上述任务,这实际上是在 2 月 17 日星期二晚上 9 点之后运行的
新西兰时区的时差是 +13 小时。
问题是,我应该如何进行这种比较才能让计划在我预期的时候触发?
更新 1: 因此,经过一番折腾,一些特定的项目对我有用:
- 根据下面的答案,我将服务器时区设置为我想要的时区
- 我已从配置文件中删除了 default_timezone 条目 - 这真是让我头疼!
- 用两个特定的替换替换了 Date.now、Date.current、Time.now、Time.current、DateTime.now、Date.today 等的所有各种组合: Time.zone.today(和类似的)和 Time.zone.now(有关所有有趣的详细信息,请参阅此博客 http://danilenko.org/2012/7/6/rails_timezones/)
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 heroku rake