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:
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)'
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
Ungerade. Die Einstellung nur config.active_record.default_timezone macht delayed_job korrekt, funktioniert aber nicht für andere aktive Datensatzobjekte. –
Danke! Dies führte mich auf den Weg zu einer Lösung. –