2014-03-05 91 views
5

在我的Rails應用程序中,當我使用delayed_job創建後臺作業時,所有時間都偏移了6個小時。爲什麼在delayed_job中關閉時區?

我的理解是delayed_job uses your timezone,但它就像是使用了錯誤的。而不是從UTC的-6小時(CST是我的時區),它是-12小時!

下面是一些視圖代碼來說明。注:

  • Time.now2014年3月4日23時26分55秒-0600
  • Time.now.utc2014年3月5日5時26分55秒UTC
  • 但短短几秒鐘的delayed_job的想法前是2014年3月4日17時26分53秒-0600

我的六EW:

#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)' 
+1

在你的config/application.rb中,你碰巧設置了:config.time_zone ='Central Time(US&Canada)'?如果,請嘗試將其設置爲UTC或僅將其註釋掉。 – rainkinz

+1

奇數。只設置config.active_record.default_timezone會使delayed_job正確,但不適用於任何其他活動記錄對象。 –

+0

謝謝!這使我走上了尋求解決方案的道路。 –

回答

3

這個問題在我的config/application.rb中爲@rainkinz建議,特別是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一樣。

相關問題