Rails,在 Heroku 上使用 config.time_zone 抽取计划任务和 DateTime
Rails, Rake scheduled tasks and DateTime with config.time_zone on Heroku
我似乎总是很难理解这一点...
我有 Heroku 调度程序 运行ning 每 10m 寻找新的计划作业 运行 但它不是 运行ning 我期望它 - 不同之处在于时区,但我不清楚我应该如何进行比较,以便它按我期望的方式工作。
在 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/)
使用 heroku env 变量设置默认时区:
heroku config:add TZ="America/Los_Angeles" # example for Los Angeles
我suppose,你的情况是:
heroku config:add TZ="Pacific/Auckland"
我似乎总是很难理解这一点...
我有 Heroku 调度程序 运行ning 每 10m 寻找新的计划作业 运行 但它不是 运行ning 我期望它 - 不同之处在于时区,但我不清楚我应该如何进行比较,以便它按我期望的方式工作。
在 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/)
使用 heroku env 变量设置默认时区:
heroku config:add TZ="America/Los_Angeles" # example for Los Angeles
我suppose,你的情况是:
heroku config:add TZ="Pacific/Auckland"