gpt4 book ai didi

ruby-on-rails - 为什么 delayed_job 中的时区关闭?

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:45 28 4
gpt4 key购买 nike

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

我的理解是delayed_job uses your timezone ,但好像用错了。与 UTC 相差 -6 小时(CST 是我的时区),现在是 -12 小时!

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

  • 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

<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>

输出: output of index view

我可以通过这三种方式中的任何一种来创建工作,并且会得到相同的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)'

最佳答案

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

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

显然是 default_timezone setting is deprecated after Rails 3.2.13 ,这是我几天前刚升级的。

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

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

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

关于ruby-on-rails - 为什么 delayed_job 中的时区关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22189490/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com