2013-07-23 8 views
5

Ich habe Sidekiq erfolgreich verwendet, um Hintergrundjobs auszuführen, die von Benutzeraktionen in einer Rails 3.2-Anwendung initiiert werden. Meine spezielle Anwendung umfasst das Senden und Empfangen von Daten von und externen Quellen über eine API eines Drittanbieters.Wie kann ich einen kontinuierlichen Hintergrundjob mit Sidekiq ausführen?

Ich muss Daten mit dieser externen Quelle synchronisiert halten, indem ich kontinuierlich für jeden Benutzer überprüfe, ob Daten zum Herunterladen verfügbar sind.

Alle meine bisherigen Hintergrundjobs sind vom Benutzer initiiert, wie ich oben erwähnt habe. Meine Frage ist, wenn ich ständig für die Existenz von externen Daten für jeden Benutzer in einer while Schleife vorstellen möge überprüfen I:

# pseudocode 
while true 

    for user in User.active 
    data = user.get_data 
    next if data.blank? 

    UserDataWorker.perform_async(user.id) 

    end 
end 

dann wo platziere ich den Code oben? Ich bin verwirrt darüber, wie man eine kontinuierliche Aufgabe hervorbringt. Ich möchte den Code nicht in einen Sidekiq-Worker einfügen, weil es nur ein Job ist, der nie abgeschlossen wird. Oder sollte ich das tun?

Ich möchte es nicht in eine Rake-Aufgabe einfügen, denn wie kann ich dann diese Rake-Aufgabe überwachen? Alles, was ich über Sidekiq gelesen habe, scheint auf einen Worker zu verweisen, der eine Aufgabe ausführt, die endlich ist und in der Lage ist, abgeschlossen oder fehlerhaft ausgeführt zu werden. Ich schätze jede Hilfe, die Sie anbieten können.

+0

Wie wäre es mit Cron Job? – mkk

+0

Ich dachte darüber nach, aber Cron ist eher aufgabenorientiert und das, wonach ich suche, ist mehr wie ein Daemon. – AKWF

Antwort

3

Ruby Multithreading ist nur dafür. Einen Thread in Ihrem Initialisierungsordner erzeugen:

Wenn Ihre Schecks nicht viel Ressourcen benötigen, sollte alles in Ordnung sein.