2010-12-16 6 views
0

Ich habe endlich die DelayedJobs Plugin arbeitet für Rails 2, und es in der Tat in Ordnung funktioniert ... solange ich laufen:Verzögerte Jobs auf Rails 2: Gibt es einen besseren Weg, Arbeiter zu führen?

rake jobs:work 

Genau wie die readme sagt, fair zu sein.

ABER, das passt nicht zu meinen Anforderungen ... Welche Art von Hintergrundaufgabe erfordert es, dass eine Shell geöffnet ist und ein Befehl ausgeführt wird? Das wäre so, als müsste ich script/server sagen, um meine Rails-App zu starten, und niemals die Option -d erhalten, damit sie auch nach dem Schließen meiner Shell weiterläuft.

Gibt es irgendeine Möglichkeit, die Arbeiter im Backgroun, im Daemon-Modus oder was auch immer zu verarbeiten?

ich einen Strahl der Hoffnung hatte, als ich die

sah

Sie können auch durch das Schreiben eines einfachen @/script job_runner @ laufen, und Aufrufen es extern:

Linie in der readme ... aber ... das macht genau das gleiche, was die Rake-Aufgabe tut, du nennst es einfach anders.

Was ich will:

Ich möchte meine Rails-Anwendung zu starten, dann beginnen, was die Arbeiter verarbeiten wird, und haben beide unsichtbar im Hintergrund laufen, ohne die Notwendigkeit für mich, es zu babysitten und Behalte die Shell, die sie gestartet hat.

(Mein Server ist etwas, in das ich SSH einfüge, also möchte ich nicht diese Shell haben, die SSHed läuft 24/7 (vor allem, da ich meinen lokalen Computer hin und wieder ausschalten möchte)).

Gibt es eine Möglichkeit, dies zu realisieren?

Antwort

2

Sie alle * nix Befehl ausgeführt durch Anhängen eines & an seinem Ende auf dem Hintergrund machen kann:

rake jobs:work & 

nur sicher, dass Sie exit die Schale machen (oder den disown Befehl) aus, den Prozess zu lösen Ihre Login-Sitzung ... Andernfalls, wenn Ihre Sitzung getrennt wird, werden die Prozesse, die Sie besitzen, damit getötet.

+0

Das ist ziemlich nah an dem, was ich eigentlich will. Ich werde nachsehen, ob es auf jeden Fall einen "Exit" -Prozess gibt. – Jenny

+1

'disown' ist dein Freund, wenn du ein Startscript schreiben willst. –

0

Vielleicht Beanstalkd und Stalker?

Bohnenstange ist eine schnelle und einfache Möglichkeit, Hintergrundaufgaben zu warten. Stalker bietet eine nette Wrapper-Oberfläche zum Erstellen dieser Jobs.

Siehe railscast darauf für weitere Informationen

Edit:

Sie könnten auch diese Rake Aufgabe als cronjob laufen, die vom Server laufen würde in regelmäßigen Abständen bedeuten würde, ohne dass Sie angemeldet sein, um in

+0

Er, ich den Rat zu schätzen wissen, aber ich wählte Verzögerung Job für einen Grund, und würde dabei bleiben bevorzugen. Ein Cron-Job würde auch nicht funktionieren, da dies keine periodische Sache ist (jedes Mal, wenn ein Benutzer eine Datei hochlädt, möchte ich sofort eine Hintergrund-Task ausführen) – Jenny

0

Verwenden Sie die collectiveidea fork of delayed_job ... Es ist aktiver entwickelt und hat die Unterstützung für die Ausführung der Aufträge in einem Daemon, ohne extra herumzualbern.

+0

Ich habe es tatsächlich überprüft (und es sieht großartig aus) . Das Problem ist, dass es nur Rails 3 unterstützt, und ich bin nicht bereit für ein Upgrade. Danke, aber^_^ – Jenny

+1

Es ist nur 2,1+, die nur mit Schienen 3 funktioniert. 2.0 funktioniert gut (und ist immer noch viel aktueller als das Hauptprojekt). https://github.com/collectividea/delayed_job/tree/v2.0 – idlefingers

0

Mein Capistrano Skript ruft

RAILS_ENV=production script/delayed_job start