为什么在delayed_job中关闭时区?

在我的Rails应用程序中,当我使用delayed_job gem创建后台作业时,我将所有时间偏移6小时。

我的理解是delayed_job使用你的时区 ,但它就像是使用了错误的时区 。 而不是距离UTC 6小时( CST是我的时区),这是-12小时!

这里有一些视图代码来说明。 注意:

  • Time.now给出2014-03-04 23:26:55 -0600
  • Time.now.utc给出2014-03-05 05:26:55 UTC
  • 但delayed_job几秒前的想法是2014-03-04 17:26:53 -0600

我的看法:

#delayed_jobs/index.html.erb 

All Background Jobs

The time now is:

The time UTC is:

ID Queue Created At Run At

输出: 索引视图的输出

我可以通过以下三种方式创建作业,并获得相同的created_at时间:

 MyClass.delay.foo MyClass.delay(run_at: 0.minutes.from_now).foo MyClass.delay(run_at: 0.minutes.from_now.getutc).foo 

我的配置有:

 #config/application.rb config.time_zone = 'Central Time (US & Canada)' config.active_record.default_timezone = 'Central Time (US & Canada)' 

问题出在我的config / application.rb中,如@rainkinz建议的那样,特别是第二行:

 config.time_zone = 'Central Time (US & Canada)' config.active_record.default_timezone = 'Central Time (US & Canada)' 

显然, 在Rails 3.2.13之后不推荐使用default_timezone设置 ,我刚刚从几天前升级了。

当我将其更改为仅设置了本地时区时:

 config.time_zone = 'Central Time (US & Canada)' #config.active_record.default_timezone = 'Central Time (US & Canada)' 

这解决了这个问题。 保存时,所有活动记录对象似乎仍然具有正确的时间,delayed_jobs也是如此。