【问题标题】:Rails, Rake scheduled tasks and DateTime with config.time_zone on Heroku在 Heroku 上使用 config.time_zone 的 Rails、Rake 计划任务和 DateTime
【发布时间】: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

现在,我刚刚看到的没有达到预期效果的确切示例是这样的:

  1. 新西兰的一位用户设置了 next_run 时间为 2 月 18 日星期三上午 10 点的时间表
  2. 根据上述任务,这实际上是在 2 月 17 日星期二晚上 9 点之后运行的

新西兰时区的时差是 +13 小时。

问题是,我应该如何进行这种比较才能让计划在我预期的时候触发?

更新 1: 因此,经过一番折腾,一些特定的项目对我有用:

  1. 根据下面的答案,我将服务器时区设置为我想要的时区
  2. 我已从配置文件中删除了 default_timezone 条目 - 这真是让我头疼!
  3. 用两个特定的替换替换了 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


    【解决方案1】:

    使用 heroku 环境变量设置默认时区:

    heroku config:add TZ="America/Los_Angeles" # example for Los Angeles
    

    suppose,你的情况是:

    heroku config:add TZ="Pacific/Auckland"
    

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 1970-01-01
      • 2014-09-14
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2011-04-26
      相关资源
      最近更新 更多