Distributed Ruby unter Mac OS 10.6
BLOG: Bierologie
Die Überschrift klingt schon extrem trocken und technisch. Aber das Thema hat mich im Rahmen meiner Bachelorarbeit an dem Institut für Evolutionsbiologie und Biodiversität ereilt. Die Slides oben sind aus dem Vortrag zu meiner Projektarbeit die sich mit den Software-Lösungen zur Analyse von Transkriptom-Daten beschäftigt. Das Transkriptom sind kurz gesagt all jene Gene die zu einem bestimmten Zeitpunkt X (in dem man die Proben nimmt) exprimiert werden, also aktiv sind.
Das ist zum einen spannend weil es erlaubt Unterschiede zwischen verschiedenen Zeitpunkten zu nehmen um so Rückschlüsse zu den Aufgaben von verschiedenen Genen zu ziehen. Und das hat natürlich nicht nur etwas mit schlichten Zeitreihen zu tun sondern klappt auch mit äußeren Einflüssen.
Beispielsweise kann man die Unterschiede in der Genaktivität zwischen kranken und gesunden Organismen (also Bakterien, Pflanzen, Tiere & Co) so bestimmen oder auch zwischen verschiedenen Umweltbedingungen in denen Organismen so heimisch sind.
Und zum anderen ist es vergleichsweise einfach (und auch billig) an Transkriptom-Daten zu kommen, zumindest wenn man sich anschaut welch ein Aufwand das Gewinnen von kompletten Genomen immer noch ist.
Und wenn man viele Daten gewinnen kann dann muss man die auch irgendwie effizient analysieren können. Sonst sind sie recht wertlos. Und da kommt meine Bachelor-Arbeit wieder ins Spiel: Ich arbeite an einer Software-Pipeline welche viele der Tools die in der Präsentation erwähnt beheimaten soll und die es dem Benutzer einfach machen soll seine Analysen ohne tiefergreifende Kenntnisse in die verschiedenen, einzelnen Tools umzusetzen.
Umgesetzt werden soll das Ganze als Web-Applikation mit dem Framework Ruby On Rails. So kriegt man eine hübsche Webseite mit viel Klicki-Bunti die im Idealfall alle gewünschten Aufgaben erledigen kann. Da die einzelnen Berechnungsschritte der Analysen, gerade bei großen Datenmengen, einige Zeit lang dauern können ist es sinnvoll die Möglichkeit zu haben die einzelnen Jobs die Benutzer einreichen auf mehrere Maschinen verteilen zu können.
Außerdem hat Rails, abhängig vom verwendeten Webserver, ein Problem damit wenn einzelne Aufgaben zu lange benötigen (und wer will schon Tagelang auf eine Webseite starren müssen?). Ruby (die Sprache in der Rails geschrieben ist) bietet genau dafür mitgelieferte Lösungen mit. Und zwar Distributed Ruby (DRb). Man kann damit auf verschiedenen Rechnern Ruby-Server bereitstellen die auf Ansprachen über Ruby reagieren und dann lustige Dinge für einen tun.
Zumindest in der Theorie und unter Linux funktioniert das auch ganz wunderbar. Leider wollt ich nun unter Mac OS 10.6 anfangen an dem Code zu schrauben. In der Theorie auch hier kein Problem. Ruby ist installiert und auch die DRb-Bibliotheken sind vorhanden. Leider scheint es irgendwo einen Bug zu geben. Denn sobald man die DRb-Funktionalitäten verwenden will fliegt einem alles um die Ohren. Beziehungsweise es wäre schön, wenn es denn so wäre.
Denn es passiert einfach gar nichts. In der Webapplikation hängt sich einfach alles auf und die einzige Möglichkeit da zu entkommen ist es den Server mit aller Gewalt zu beenden. Und auch in der Programmier-Konsole lässt sich das Problem nachvollziehen. Mit dem gleichen Ergebnis und im Idealfall nimmt Ruby dann also gleich das ganze Terminal mit in den Abgrund. Wunderbar.
Bislang umgehe ich das Problem einfach damit, dass ich in einer virtuellen Maschine ein Ubuntu installiert habe und dort die Server für das Distributed Ruby laufen lasse. Da sämtliche Source-Files in einem Dropbox-Ordner liegen kann ich sie auch ganz bequem von Mac OS aus bearbeiten ohne ständig auf der virtuellen Maschine zu arbeiten. Das ist zwar keine schöne Lösung, aber bislang besser als gar keine.
Falls ihr also eine gute Idee habt oder im Idealfall selbst betroffen seid von dem Problem: Ich freue mich über Lösungsideen oder Berichte von Leidensgenossen.