2016-08-01 29 views
2

Wir verwenden derzeit 'wann immer', um Jobs in einem Rails-Projekt zu planen. Das System wird erweitert, um Benutzer in mehreren Zeitzonen zu unterstützen (die Zeitzone ist im Benutzermodell gespeichert) und wir möchten Benutzern zu einem bestimmten Zeitpunkt ihres Tages eine E-Mail senden.Multi-Zeitzonen-Taskplanung in Rails (mit Verwendung von immer)

Irgendwelche Ideen über das beste Muster, um dies zu erreichen? Ich sehe 24 (oder mehr - es gibt halbe Zeitzonen) "Immer wenn" Aufgaben pro E-Mail-Job mit jeweils einem anderen Zeitzonenfilter in der Benutzertabelle.

Irgendwelche Ideen für eine sauberere Lösung? Ein besserer Scheduler als wann immer? Etwas, das die 24/48 Cronjobs erstellt und einen Callback aufruft, der eine Zeitzone oder einen UTC-Offset passiert? So ähnlich.

Antwort

1

Ich bin nicht mit ‚wenn‘ aber ich hatte eine ähnliche Herausforderung und verwendet clockwork

Mein Problem war, dass ich für jeden meiner Kunden einen Prozess um Mitternacht ausgeführt hatte. Und wie du, meine Kunden können überall auf der Welt sein, also musste um Mitternacht ihre Zeit laufen.

Der Prozess um den Job um Mitternacht laufen sah dies so etwas wie:

TZInfo::Timezone.all_country_zone_identifiers.each do |zone|                                                
    every(1.day, {time_zone: zone}, at: '00:00', tz: "#{zone}") do |job_attr|                                 
    time_zone = job_attr[:time_zone]                                             
    YourJob.perform_later(time_zone)                                               
    end                                                          
end 

Die Klasse von ‚YourJob‘ wird mit diesem time_zone finden alle meine Kunden nur und einen Job auszuführen.

Hoffe, dass hilft.

+0

Ich mache auch genau das gleiche, was Sie tun. Aber ich stehe vor einem Problem. Wenn ich eine bestimmte Zeit geplant habe (z. B. Singapur), passt sie zu einer anderen Zeitzone (Asia/Hong_kong), so dass sie für hong_kong-Benutzer, nicht aber für Singapur-Benutzer ausgeführt wird. Könnten Sie mir bitte helfen, das zu lösen? – anusha