2010-11-18 12 views
1

Ich betreibe eine Rails App, die einen kontinuierlichen Prozess im Hintergrund haben muss. Die Idee ist, dass Benutzer transaktional zu einer Liste hinzugefügt werden, die sich innerhalb des Prozesses befindet, und dann gemäß einem kontinuierlich laufenden Algorithmus gepaart werden.Rails Hintergrund Prozess/Datenstruktur

Ich kann den Algorithmus nicht einfach ausführen, nachdem jeder Benutzer hinzugefügt wurde, da wir den Algorithmus auch ausführen müssen, wenn ein Benutzer eine gewisse Zeit gewartet hat.

Ist das möglich? Ich brauche im Grunde eine Datenstruktur, die ständig läuft und zu Diff-Zeiten im Hintergrund aufgerufen wird.

Danke!

Antwort

2

delayed_job funktioniert gut und ist super einfach zu integrieren. Sie können sogar beliebig im Hintergrund laufen lassen. Es lädt die Rails-App als Worker und speichert sie im Speicher, im Gegensatz zu Script/Runner, das die App ständig lädt und entlädt. DJ beobachtet die db, um nach Jobs zu suchen. Ich habe sogar eine Site eingerichtet, auf der ein anderer Server die Hintergrundaufgaben getrennt vom App-Server verarbeitet.

+0

kannst du meinen Kommentar zu der anderen Antwort sehen? Könnte DJ Hintergrunddatenstrukturen behandeln? – Danny

+0

Können Sie Ihre Datenstruktur klären oder ein Beispiel geben? Ist es ein Hash oder etwas, das mit dem Benutzer geladen ist oder lebt es über alle Anfragen im Speicher? Bei mehreren Hintergrundjob-Apps können Sie Argumente übergeben, die dann in der Datenbank serialisiert und neu geladen werden. – Caleb

+0

Ja. Es wird also höchstwahrscheinlich eine große Baumstruktur geben, die ständig modifiziert wird. Denkst du, dass das möglich ist? Vielen Dank! – Danny

1

Werfen Sie einen Blick auf Workling und Starling.

+0

Also habe ich sie angeschaut, und ich verstehe die Hintergrund-Jobs/Methoden, die Sie ausführen können, aber ich bin unsicher, wie dies mir eine persistente Datenstruktur im Hintergrund laufen lassen würde. Stellen Sie sich einen großen Binärbaum vor, den ich ständig aktualisieren möchte. Irgendwelche Ideen? – Danny

0

Sie könnten es mit Cron und/oder einem Shell-Skript oder Batch-Datei, und Rake oder Rail's script runner tun.

Mit Cron können Sie Intervalle angeben, in denen der Job ausgeführt wird, z. B. alle fünf Minuten. Oder Sie könnten ein Skript schreiben, das beim Systemstart gestartet wird, dann für eine Weile ruht, aufwacht und Ihren Code ausführt, dann wieder in den Ruhezustand wechselt und auf unbestimmte Zeit läuft.

Oder Sie könnten eine Schleife in Ihrem Skript schreiben, die Ihre Aktionen ausführt, dann intern schläft, wacht und wieder läuft, dann wieder schlafen.

Der Vorteil der Verwendung von Rail's script runner ist der Zugriff auf alles, was Ihrer Rails App bekannt ist. Der Nachteil ist, dass die App länger braucht, um zu starten, weil sie jedes Mal, wenn sie gestartet wird, die Rails-Initialisierungsroutinen durchlaufen muss, und deshalb habe ich erwähnt, dass ich etwas durchgehen und dann schlafen soll.

Verwandte Themen