2009-10-28 5 views
7

Ich benutze einen verzögerten Job, um Hintergrundarbeit zu verwalten.
Allerdings habe ich einige Aufgaben, die in regelmäßigen Abständen ausgeführt werden müssen. Zum Beispiel jede Stunde, jeden Tag oder jede Woche.Regelmäßig verzögerte Jobs

Für jetzt, wenn ich die Aufgabe ausführen, erstelle ich eine neue, die an einem Tag/Woche/Monat ausgeführt werden soll.

Allerdings mag ich es nicht wirklich. Wenn die Aufgabe aus irgendeinem Grund nicht vollständig ausgeführt wird, erstellen wir nicht die nächste Aufgabe, und wir könnten die Ausführung der Aufgabe verlieren.

Wie verwalten Sie solche Dinge (mit verzögertem Job) in Ihren Rails-Apps, um sicherzugehen, dass Ihre normale Aufgabenliste korrekt ist?

Antwort

5

Wenn Sie Zugriff auf Cron haben, sehr Jedes Mal, wenn ich empfehlen

http://github.com/javan/whenever

Sie legen fest, was Sie und bei welcher Frequenz in toten einfaches Ruby ausgeführt werden soll, und wann immer liefert Aufgaben Rake diese in eine umwandeln crontab und um die Crontab Ihres Systems zu aktualisieren.

Wenn Sie keinen Zugang zu häufigen Cron haben (wie ich nicht, da wir auf Heroku sind), dann ist DJ der Weg zu gehen.

Sie haben ein paar Optionen.

  1. Machen Sie, was Sie tun. DJ wird jede Aufgabe wiederholen eine bestimmte Anzahl von Malen, so dass Sie etwas Nachsicht haben

  2. Legen Sie den Code, der den nächsten DJ-Job erstellt in einem sicherstellen, um sicherzustellen, dass es auch nach einer Ausnahme oder anderen schlechten Ereignis erstellt wird

  3. Erstellen Sie einen anderen DJ, der regelmäßig ausgeführt wird, um sicherzustellen, dass die entsprechenden DJs vorhanden sind, und erstellt sie, wenn dies nicht der Fall ist. Natürlich ist dies genauso fehleranfällig wie die anderen Optionen, da der Monitor und der eigentliche DJ beide in derselben Umgebung laufen, aber es ist etwas.

+0

Schöne Sache, wann auch immer. Mit einigen Aufgaben, die mir erlauben, crontab neu zu laden, wenn ich etwas ändere (ich muss Aufgaben dynamisch ändern). Vielen Dank :) –

1

Gibt es einen bestimmten Grund, warum Sie Cron nicht für diese Art von Dingen verwenden würden? Oder vielleicht etwas mehr rubinisch wie rufus-scheduler, das ist ziemlich easy to use und sehr zuverlässig.

Wenn Sie nicht Schlange stehen müssen, sind diese Tools ein Weg, denke ich.

+1

Nun, ich habe bereits den verzögerten Job deamon. Und ich möchte es vermeiden, einen zweiten zu starten. –

+0

Sie müssen keinen neuen Daemon mit rufus-scheduler starten. Es verwendet eine einfache Schleife oder EventMachine, um nach Jobs zu suchen, die ausgeführt werden sollen. Cron ist ein Daemon, aber normalerweise brauchst du es trotzdem. –