Hallo Leute,
ich habe eine Frage, die rein von der Formulierung her vielleicht schon
aus der falschen Ecke kommt, daher korrigiert mich gern.
Folgendes Problem: Ich habe einige Actions, welche ungeheuer viel Code
ausführen, bevor sie beginnen zu rendern, unter anderem jede Menge Mails
versenden, Records kreieren, andere updaten, wieder andere löschen.
Der Wunsch: Die Codeteile, welche notwendig sind vor dem Rendering
ausführen lassen, die anderen aber “detachen” und einfach in den
Hintergrund schicken, damit der Nutzer nicht so lange auf die Response
der Action warten muss.
Gibt es hier einen Ansatz?
Für jeden Tip dankbar.
Beste Grüße
Jan R.
jan [et] roesner [dot] it
Hallo Jan,
schau’ Dir doch mal Skynet an (http://skynet.rubyforge.org/). Das ist
eine Map-Reduce Implementierung in Ruby. So wie’s kingt brauchst Du
zwar nur den Map-Teil, aber das sollte problemlos gehen. Hab’s mir
neulich mal angesehen und es machte einen ziemlich soliden Eindruck.
Insbesondere in Zusammenhang mit AR scheint es Stärken zu haben. In
der Praxis hab ich’s noch nicht gebraucht, bin aber auf einen
Erfahrungsbericht gespannt. Mehr Input geben können Dir sicher die
Leute, die in Frankfurt auf dem Message-Cue Vortrag waren… den ich
leider verpasst habe. Ansonsten ist (plain) DRb der übliche
Verdächtige.
Grüße, Niko.
Hi Jan,
es gibt auch noch den BackgroundRB( http://backgroundrb.rubyforge.org/ )
Funktioniert sehr gut.
Es sind genügend Anleitungen auf der Seite zu finden.
gruß Malte
Jan R. schrieb:
Malte B. wrote:
Hi Jan,
es gibt auch noch den BackgroundRB( http://backgroundrb.rubyforge.org/ )
Funktioniert sehr gut.
Es gibt viele andere Alternativen zu Backgroundrb: BackgroundJob, bj,
spawn, activemessaging, workling/starling, selber Daemon schreiben, …
Von Backgroundrb rate ich eher ab:
- Jede Version ist ein kompletter Rewrite
- Bis vor kurzem Drb genutzt: Nicht zu firewallen
- Instabil
- Verkompliziert deployment, da brb laufen muss, wenn die Applikation
laufen soll
- …
Jonathan
Hi Jan,
das hier spuckte mein RSS-Reader gerade aus, vielleicht ist das was
für dich:
http://cfis.savagexi.com/articles/2008/06/16/rails-super-simple-asynchronous-processing
MFG
Sebastian
Hallo Leute,
Danke für die Hinweise, ich hab eine Menge zu lesen gehabt. Spawn
scheint zumindest für meine aktuellen Zwecke das Mittel der Wahl zu
sein. Mal sehen, ob ich damit glücklich werde.
Danke.
Gruss
Jan Rösner
jan [et] roesner [dot] it
Hallo Jan,
wir haben gerade zu diesem Thema ein Rails-Plugin released, was
Hintergrundverarbeitung schön abstrahiert, so dass man später immer noch
ohne große Änderungen am Code das dahinter liegende System ändern kann
(z.B.
von BackgroundDRB wechseln zu Message-Queue)
http://devblog.imedo.de/2008/6/18/running-ruby-blocks-in-the-background
Gruß,
Hendrik