为什么在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也是如此。