2010-12-15 16 views
1

Ich arbeite an einer Rails 2.3.x-Anwendung, die eine lange, langsame Aufgabe asynchron ausführen muss.Langsame Aufgaben asynchron in Rails ausführen?

Das Verzögern der Anforderung bis zum Abschluss der Verarbeitung ist ein wenig mühsam. Wir schicken Ihnen gerne eine "Okay, wir haben diese und wir arbeiten daran" -Stil Antwort an den Kunden, und dann knacken Sie einfach die Arbeit, sobald der Kunde weg ist.

Also habe ich ein paar Methoden dafür gesehen (wie Gabeln oder Cron verwenden), aber es scheint, dass Task-Queuing-Systeme eine bessere Idee sein könnte.

Es scheint, wie die drei wichtigsten sind:

Sparrow besonders interessant sieht wegen seiner Unterstützung für Memcached, aber ich Ich möchte nicht einfach eine auswählen, ohne eine fundierte Entscheidung zu treffen. Hat jemand einen Einblick in Best Practices? Ich würde gerne von Ihren Erfahrungen mit den oben genannten hören, vor allem große Probleme mit diesem Ansatz oder den genannten Bibliotheken. Vielleicht gibt es einen noch besseren Weg, dies zu tun, den ich komplett vermisst habe?

Nur so ist es da draußen: Rails 3.x ist keine Option im Moment, das muss für Rails 2.3.x funktionieren.

Danke!

+3

Versuchen Sie auch: [navvy] (https://github.com/jeffkreftmeijer/navvy) und [delayed_job] (https://github.com/tobi/delayed_job) haben gute Erfahrungen mit ihnen beiden, aber keine besonderen Einblicke – iain

+0

Sie könnten immer Ihre eigenen schreiben. Meiner Erfahrung nach werden Sie dadurch Ihr eigenes Problem besser verstehen als die Lösung, und es wird genau das tun, was Sie brauchen. Es ist Zeit, besser auszugeben, als die Lösungen anderer Leute für ihre eigenen, etwas anderen Probleme zu lesen. – maerics

Antwort

1

Ich empfehle delayed_job, speziell this fork and branch. Ich benutze es selbst auf Schienen 2.3.5 und es funktioniert gut.

Es hat eine Schiene 3 Zweig für, wenn Sie aktualisieren wollen, um es mit mehreren Backends funktioniert, und es verfügt über eine optionale ziemlich Syntax:

Notifier.delay.deliver_signup @user 

By the way, nur Forking ist ein Fehler, wie Sie Ich finde, dass die Gabel keine gute Datenbankverbindung hat.

+0

Hey, danke für die Einsicht. :) Irgendein besonderer Grund dafür, mit 2.0.0 über 2.0.5 zu gehen? –

+0

Der Zweig, mit dem ich verlinkt bin, ist für Rails 2 und hat die Version 2.0.x, also benutze die neueste Version - derzeit 2.0.5. Wenn Sie bündler (good move) verwenden, können Sie die neueste Version der 2.0.x-Serie angeben, indem Sie "gem delayed_job, '~> 2.0.5'" sagen, was 2.0.6, 2.0.12 usw. entspricht. – gunn

Verwandte Themen