Frage Korrekte Verwendung von Ereignissen, die mit Ice Cube in Rails mit einem täglichen Cron-Job erstellt wurden


Ich möchte wiederkehrende Ereignisse mit dem Ice Cube-Juwel in Rails erstellen - meine Frage ist, wie verwende ich dann diese regelmässigen Regeln für das Auslösen von tatsächlichen Ereignissen richtig oder effizient?

Ein Beispiel dafür wäre eine wiederkehrende Rechnung.

Angenommen, ich habe einmal pro Woche eine Ice Cube-Wiederholung festgelegt und sie mit to_yaml in einer wiederkehrenden Rechnungszeile gespeichert. Ich habe jetzt eine Zeile in der Datenbank mit einer serialisierten Wiederholungsregel. Der einzige Weg, den ich mir vorstellen kann, ist, jede einzelne Zeile in der Datenbank zu durchlaufen, die gespeicherten Wiederholungsregeln zu deserialisieren und zu überprüfen, ob sie heute mit schedule.occurs_on (Date.new) ausgeführt werden muss - das würde dann eingefügt werden ein Cronjob, der täglich läuft:

items = RecurringItem.find(:all)
items.each do |item|
    schedule = Schedule.from_yaml(item.schedule_yaml)
    if schedule.occurs_on?(Date.new)
        #if today is a recurrence, do stuff!
    end
end

Das sieht für mich furchtbar ineffizient aus - aber ich mache es vielleicht völlig falsch. Gibt es keinen besseren Weg, Ice Cube zu benutzen?


12
2017-08-01 18:25


Ursprung


Antworten:


Ice Cube scheint sich darauf spezialisiert zu haben, sehr komplizierte Zeitpläne zu erstellen (tritt am 1. und 4. Mittwoch auf, aber nur, wenn sie gerade nummeriert sind, und nicht wenn ein Wochenende usw.)

Wenn es das ist, was Sie brauchen, dann ist die von Ihnen beschriebene Aufgabe wahrscheinlich der effizienteste Weg, um eine Reihe von Aufgaben jeden Tag in diesem komplexen Zeitplan auszuführen. Wenn Sie diese Komplexität in Ihren Zeitplänen nicht benötigen, können Sie sich etwas wie immer ansehen (wie MatthewFord bereits erwähnt hat), das Cron-Zeitpläne verwendet, um auszuführende Aufgaben einzurichten, aber das ist für Aufgaben vom Typ Admin gedacht und erfordert dies eine Konfigurationsdatei, die bearbeitet werden soll, und funktioniert nicht, wenn Sie Dinge über Ihre Anwendungsschnittstelle hinzufügen und entfernen müssen.

Eine weitere Option für die Verwendung von Ice Cube wäre ein monatlicher Cron, der jeden Zeitplan durchläuft, und eine weitere Tabelle, die definiert, welche Ereignisse an welchen Tagen des nächsten Monats ausgeführt werden müssen. (Jede Zeile hat eine Datums- und eine Aufgabendefinition), und Ihr täglicher Cron könnte aus dieser Tabelle auswählen ...

Sie müssten diese Tabelle auch für einen Monat im Voraus aktualisieren, jedes Mal, wenn sich einer der Zeitpläne in der Anwendung ändert ... ein bisschen mühsam. Wenn Sie also nicht jeden Tag Hunderttausende von Zeitplänen durchsehen, ist es wahrscheinlich den Aufwand nicht wert.


3
2018-04-18 23:30



Da Sie ice_cube verwenden, können Sie nachsehen Sidetiq. Es verwendet ice_cube, um die Planung von Jobs zu spezifizieren, also wäre es einfach für Sie, sich zu erhängen.

Anstatt alle Datensätze zu überprüfen, um den geeigneten zu finden, würde ich versuchen, geplante Ereignisse basierend auf diesen Regeln zu generieren, aber ich denke, es gibt viele Möglichkeiten, dies zu tun, was möglicherweise effizienter ist.


0
2017-09-04 08:23