在Heroku上使用config.time_zone进行Rails,Rake计划任务和DateTime

时间:2015-02-18 06:36:25

标签: ruby-on-rails ruby-on-rails-4 heroku rake

我似乎总是难以理解这一点......

我每隔10米运行一次Heroku调度程序,寻找要运行的新预定作业,但是当我预期它没有运行时 - 差异是时区但是我不清楚我应该如何进行比较所以它按照我期望的方式工作。

在我们的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. 新西兰的用户在2月18日星期三上午10点设定了下一个时间表,
  2. 根据上述任务,这实际上是在2月17日星期二晚上9点之后运行的。
  3. 差异是新西兰时区的+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/

1 个答案:

答案 0 :(得分:1)

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

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

suppose,根据您的情况,它将是:

heroku config:add TZ="Pacific/Auckland"