2009-07-14 8 views
2

Ich habe festgestellt, dass ich in den von mir entwickelten Anwendungen oft eine Art Scheduler implementieren muss. Die Anwendungen können von einfachen Wartungsaufgaben bis zu ziemlich komplexen Aufgaben reichen.Welchen Ansatz würden Sie für die Implementierung von webbasierten Schedulern empfehlen?

Bis jetzt war mein Ansatz, Cron-Jobs einzurichten, die Batch-Verarbeitung von in Warteschlange befindlichen Befehlen im Wesentlichen durchführen. Zum Beispiel habe ich cron alle 5 Minuten ein Skript aufrufen (ich arbeite in RubyOnRails, so dass es ein Runner-Skript ist), das überprüft, ob irgendwelche Elemente verarbeitet werden müssen, und delegiert dann die Aufgaben an geeignete Handler.

Dies funktioniert, aber aus irgendeinem Grund fühlt sich nicht wie der beste Ansatz. Kannst du etwas empfehlen oder irgendwelche Kommentare dazu?

Ich arbeite in Ruby on Rails, aber es gibt keinen Grund, diese Diskussion sollte nur auf RoR beschränkt werden.

Danke,

Antwort

3

eine Reihe von Möglichkeiten, dies zu tun. Für ein Projekt, das wir kürzlich entwickelt haben, haben wir delayed_job verwendet, ein exzellentes Async-Tool für Rails. Wir können einen Job so einrichten, dass er alle 5 Minuten ausgeführt wird, und der Job erstellt dann einen anderen Job, sobald er fertig ist, und so weiter.

Andere Tools wie BackgroundRB unterstützen standardmäßig einen Cron-artigen Worker.

Ich finde oft, dass das Ausführen einer einmal pro Minute Rake-Aufgabe, um neue Jobs zu delayed_job hinzuzufügen, wirklich gut funktioniert; Vielleicht möchten Sie das ausprobieren. Es ist am widerstandsfähigsten und lässt Sie die gesamte Timer-Logik in Ruby behalten, ohne hässliche Hacks oder potenziell zerbrechliche Setups wie mein Beispiel delayed_job zu benötigen (zB müssen Sie die Arbeitswarteschlange löschen; Sie müssen nun alle Jobs neu setzen, um sie zu erhalten funktioniert richtig).

Delayed_job ist extrem einfach zu bearbeiten und sehr hackbar, also wenn Sie nach einem Ort zum Starten suchen, ist das wahrscheinlich ein ebenso guter Ort wie jeder andere.

0

Kann nicht sehen, warum Sie nicht Cron und Skript/Läufer verwenden würden. Der Vorteil ist, dass Ihre (zusätzlich benötigte) Rails-Umgebung nicht immer geladen ist und nur geladen wird, wenn Sie den Job ausführen müssen.

Nachteil ist, dass es hängt davon ab, Cron vorhanden ist ...?

+0

Ja, das Art von Nachteil ist. Ich schätze, dass es nichts ausmacht, was ich hostle, aber was ist, wenn ich ein Paket für einen Kunden bereitstellen muss? – Goro

+0

Sie könnten es an das Ende der Crontab anhängen (würde sudo erfordern) –

1

Ein anderer Vorschlag ist, einen eigenen benutzerdefinierten Daemon zu erstellen. Dies gibt Ihnen die Flexibilität, so ziemlich alles zu tun, was Sie brauchen.

Es wurde in einer ausgezeichneten Railscast Screencasts bedeckt - http://railscasts.com/episodes/129-custom-daemon