2014-03-05 10 views
5

In meiner Rails-App, wenn ich einen Hintergrundjob unter Verwendung der delayed_job Gem erstellen, bekomme ich alle Zeiten um 6 Stunden versetzt.Warum ist die Zeitzone in delayed_job deaktiviert?

Mein Verständnis ist, dass delayed_job uses your timezone, aber es ist wie es ist mit der falschen. Anstatt -6 Stunden von UTC (CST ist meine Zeitzone) ist es -12 Stunden!

Hier ist ein bisschen Ansichtscode zur Veranschaulichung. Hinweis:

  • Time.now gibt 2014-03-04 23:26:55 -0600
  • Time.now.utc gibt 2014.03.05 05.26.55 UTC
  • aber delayed_job Idee von nur wenigen Sekunden ist 2014-03-04 17:26:53 -0600

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

Ausgang: output of index view

I Jobs jeder dieser drei Möglichkeiten schaffen können, und wird die gleiche created_at Zeit erhalten:

MyClass.delay.foo 
MyClass.delay(run_at: 0.minutes.from_now).foo 
MyClass.delay(run_at: 0.minutes.from_now.getutc).foo 

Meine Konfiguration hat:

#config/application.rb 

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

In Ihrer config/application.rb haben Sie zufällig festgelegt: config.time_zone = 'Central Time (USA & Kanada)'? Wenn ja, versuche es auf UTC zu setzen oder es einfach zu kommentieren. – rainkinz

+1

Ungerade. Die Einstellung nur config.active_record.default_timezone macht delayed_job korrekt, funktioniert aber nicht für andere aktive Datensatzobjekte. –

+0

Danke! Dies führte mich auf den Weg zu einer Lösung. –

Antwort

3

Das Problem war in meiner config/application.rb als @rainkinz vorgeschlagen, insbesondere die 2. Zeile:

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

Anscheinend ist der default_timezone setting is deprecated after Rails 3.2.13, die ich gerade vor von wenigen Tagen aktualisiert.

Als ich es verändert nur die lokale Zeitzone Set haben:

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

Dies das Problem behoben. Alle aktiven Record-Objekte scheinen beim Speichern immer noch die korrekte Uhrzeit zu haben, ebenso wie delayed_jobs.