jos*_*ine 5 ruby timezone ruby-on-rails delayed-job timezone-offset
在我的Rails应用程序中,当我使用delayed_job gem 创建后台作业时,我将所有时间偏移6小时.
我的理解是delayed_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>
Run Code Online (Sandbox Code Playgroud)
输出:

我可以通过以下三种方式创建作业,并获得相同的created_at时间:
MyClass.delay.foo
MyClass.delay(run_at: 0.minutes.from_now).foo
MyClass.delay(run_at: 0.minutes.from_now.getutc).foo
Run Code Online (Sandbox Code Playgroud)
我的配置有:
#config/application.rb
config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'
Run Code Online (Sandbox Code Playgroud)
正如 @rainkinz 所建议的,问题出在我的 config/application.rb 中,特别是第二行:
config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'
Run Code Online (Sandbox Code Playgroud)
显然,default_timezone 设置在 Rails 3.2.13 之后已被弃用,我几天前刚刚升级了它。
当我将其更改为仅设置本地时区时:
config.time_zone = 'Central Time (US & Canada)'
#config.active_record.default_timezone = 'Central Time (US & Canada)'
Run Code Online (Sandbox Code Playgroud)
这解决了问题。所有活动记录对象在保存时似乎仍然具有正确的时间,延迟作业也是如此。
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |