blog.andreas-klingler.de

Notizen und Gedanken von Andreas Marc Klingler

Schlagwort: Ruby

Code-Realität

In Vorlesungen hört man ja ab und zu Horror-Geschichten über „die Realität“(tm). Man lacht dann meist darüber und fragt sich, ob es denn stimmen kann, das in freier Wildbahn wirklich dermaßen unglaublich schrecklicher Code existieren kann. So blöd kann ja keiner sein.

Letzte Woche habe ein solches Beispiel erlebt, bei dessen Code-Analyse ich minutenlang nicht mehr aus dem Lachen herauskam. Auch wenn Weinen wohl angemessener gewesen wäre.

Es ging um eine Webplattform, die trotz 8-Kern-Systems mit 32 GB RAM kaum noch benutzbar war aufgrund extrem langer Antwortzeiten im Minutenbereich. Ein Hauptproblem war eine Mehode, die folgendes gemacht hat:

  • Lade zu Beginn erstmal alle Objekte aus der Datenbank in eine Variable.
  • Lade, weil’s so schön ist, auch direkt alle abgeleiteten Objekte abgeleiteter Tabellen in Variable.
  • Führe diverse Transformationen mit allen diesen Objekten aus (deren Sinn sich mir nicht zu 100% erschlossen hat).
  • Filtere ca. 80% der Objekte raus.
  • Führe mit der verbleibenden Objekten weitere Transformationen durch.
  • Ermittle schließlich die Anzahl der Elemente, die in der „Hauptvariable“ noch drin sind, und …
  • verwende diesen Wert nie wieder.

Überflüssig zu sagen, dass auch die anderen Variablen überhaupt nicht verwendet werden. Tja…

Willkommen in der Realität! (Fluchtmöglichkeiten sind nicht ausgeschildert.)

(Nachtrag: Zum Thema: devopsreactions.tumblr.com, codinghumor.tumblr.com uvm.)

Ruby on Rails: perform_caching und Flash-Meldungen

Bei einem Ruby-on-Rails-Projekt funktionierte lokal alles – aber in der Umgebung production (unter nginx) verschwanden die Flash-Meldungen (zum Beispiel nach dem Login über Devise) nicht mehr – beziehungsweise erst, als eine Seite gerändert wurde, die von einem anderen Controller verwaltet wird.

Da das Projekt Devise teilweise per Ajax nutzt und die einige Flash-Meldungen selbst ausgibt, dachten wir erst an alles andere; bis wir, als uns nach etlichen Stunden Debugging langsam die Optionen ausgingen, wir einfach mal den Inhalt der development– und production-Dateien in config/environments austauschten. Und siehe da, das Problem war weg.

Der Grund des Problems war folgende Einstellung:

config.action_controller.perform_caching = true

Nachdem wir sie in production auf false gesetzt haben, funktionierten die Flash-Meldungen wieder.  Rückblickend ist das eigentlich klar, aber darauf zu kommen, hat gedauert.

Merke daher: Gibt es Probleme mit dem Anzeigen von Flash-Meldungen, immer auch an diese Caching-Einstellung denken.