Wir geben zurück!

Delayed::Job ist eine in Ruby geschriebene Background Task Engine. Pascal Zumkehr hat die Bibliothek für periodische Aufgaben erweitert und den Quellcode veröffentlicht.

Delayed::Job

In vielen unserer Ruby on Rails Projekten verwenden wir die etablierte Open Source Background Task Engine Delayed::Job. Damit lassen sich zeitintensive Aufgaben bequem im Hintergrund ausführen, ohne dass die Anfrage eines Benutzers blockiert wird. Delayed::Job eignet sich hervorragend für kleinere und mittlere Workloads und lässt sich sehr einfach aufsetzen. Um einen Job zu starten, genügt die folgende Zeile:

Delayed::Job.enqueue(MyJob.new, run_at: 5.minutes.from_now)

Delayed::Cron::Job

Eine oft vermisste Funktionalität von Delayed::Job ist die Möglichkeit, periodisch wiederkehrende Aufgaben auszuführen. Bereits mehrmals haben wir dies zusätzlich implementiert, je nach Anforderungen mehr oder weniger komplex. Als im Rahmen eines internen Projekts diese Funktionalität erneut erforderlich wurde, wollten wir dieses Feature ein für alle Mal implementieren.

Basierend auf unserer langjährigen Erfahrung war schnell klar, dass nur ein Konstrukt alle Use Cases zufriedenstellend abdecken konnte: Cron Ausdrücke. Damit lassen sich beliebige Intervalle in den Zeiträumen von Minuten, Stunden, Tagen, Monaten und Wochentagen definieren. Dies gibt der Entwicklerin volle Kontrolle und lässt ihr die Freiheit, ob und wie der Endbenutzer diese Intervalle definiert.

Ruby Bibliotheken sind in der Regel ohne grossen Aufwand erweiterbar. Delayed::Job bietet sogar ein einfaches Plugin API an. Für das Parsen der Cron Ausdrücke konnten wir auf eine andere Open Source Bibliothek zurückgreifen. So war die Implementation eine kurze Sache, und die Verwendung der neuen Funktionalität ist trivial:

Delayed::Job.enqueue(MyJob.new, cron: '0 6,18 * * *')

Open Source

Als intensive Nutzer von Open Source Bibliotheken sind wir daran interessiert, dass diese möglichst gut und lange unterhalten werden. Durch die aktive Unterstützung der entsprechenden Ökosysteme steigern wir die Attraktivität der Bibliotheken, was wiederum weitere Nutzer und Investitionen anzieht und so hoffentlich den Fortbestand sichert. Eine nachhaltige Form der Unterstützung ist das Veröffentlichen von eigener Software.

Einige Fragen, die man sich dabei stellen kann: Hätten wir durch das geschlossen Halten dieser Software einen Marktvorteil? Ist dieser entscheidend? Bringt das Open-Sourcing einen Mehraufwand? Können uns Fehlerberichte und Verbesserungen von anderen Anwendern ebenfalls nützlich sein? Wie werden wir in der Community wahrgenommen?

Weil wir überzeugt sind, dass der Ertrag die Aufwände hier bei weitem übersteigt, wurde der Quelltext von Delayed::Cron::Job auf Github und das lauffähige Paket
auf Rubygems veröffentlicht.

Wir freuen uns auf gefundene Probleme und weitere Funktionalitäten!

Kommentare sind geschlossen.