在我的Rails应用程序中,当我使用delay_job gem创建后台作业时,所有时间都偏移了6个小时。
我的理解是,delay_job使用您的时区,但这就像使用了错误的时区。而不是从UTC到达-6小时(CST是我的时区),而是-12个小时!
这里有一些视图代码来说明。注意:
我的观点:
#delayed_jobs/index.html.erb
<h1>All Background Jobs</h1>
<p>The time now is: <%= Time.now %> </p>
<p>The time UTC is: <%= Time.now.utc %> </p>
<table>
<tr>
<th>ID</th>
<th>Queue</th>
<th>Created At</th>
<th>Run At</th>
</tr>
<% @delayed_jobs.each do |dj| %>
<tr>
<td><%= dj.id %></td>
<td><%= dj.queue %></td>
<td><%= dj.created_at %></td>
<td><%= dj.run_at %></td>
</tr>
<% end %>
</table>
输出:
我可以通过以下三种方式中的任何一种来创建作业,并且在同一时间获得相同的created_:
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)'
这解决了问题。保存时,所有活动记录对象似乎仍具有正确的时间,与delay_jobs一样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句