加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:02:24 所属栏目:百科 来源:网络整理
导读:在我的Rails应用程序中,当我使用 delayed_job gem创建后台作业时,我将所有时间偏移6小时. 我的理解是delayed_job uses your timezone,但它就像是使用了错误的.而不是距离UTC(CST是我的时区)-6小时,这是-12小时! 这里有一些视图代码来说明.注意: Time.now给
在我的Rails应用程序中,当我使用 delayed_job gem创建后台作业时,我将所有时间偏移6小时.

我的理解是delayed_job uses your timezone,但它就像是使用了错误的.而不是距离UTC(CST是我的时区)-6小时,这是-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

<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_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)'

显然是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也是如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读