blog.andreas-klingler.de

Notizen und Gedanken von Andreas Marc Klingler

Schlagwort: Ruby

Code-Rea­li­tät

In Vor­le­sun­gen hört man ja ab und zu Hor­ror-Geschich­ten über „die Rea­li­tät”™. Man lacht dann meist dar­über und fragt sich, ob es denn stim­men kann, das in frei­er Wild­bahn wirk­lich der­ma­ßen unglaub­lich schreck­li­cher Code exis­tie­ren kann. So blöd kann ja kei­ner sein.

Letz­te Woche habe ein sol­ches Bei­spiel erlebt, bei des­sen Code-Ana­ly­se ich minu­ten­lang nicht mehr aus dem Lachen her­aus­kam. Auch wenn Wei­nen wohl ange­mes­se­ner gewe­sen wäre.

Es ging um eine Web­platt­form, die trotz 8-Kern-Sys­tems mit 32 GB RAM kaum noch benutz­bar war auf­grund extrem lan­ger Ant­wort­zei­ten im Minu­ten­be­reich. Ein Haupt­pro­blem war eine Meho­de, die fol­gen­des gemacht hat:

  • Lade zu Beginn erst­mal alle Objek­te aus der Daten­bank in eine Varia­ble.
  • Lade, weil’s so schön ist, auch direkt alle abge­lei­te­ten Objek­te abge­lei­te­ter Tabel­len in Varia­ble.
  • Füh­re diver­se Trans­for­ma­tio­nen mit allen die­sen Objek­ten aus (deren Sinn sich mir nicht zu 100% erschlos­sen hat).
  • Fil­te­re ca. 80% der Objek­te raus.
  • Füh­re mit der ver­blei­ben­den Objek­ten wei­te­re Trans­for­ma­tio­nen durch.
  • Ermitt­le schließ­lich die Anzahl der Ele­men­te, die in der „Haupt­va­ria­ble” noch drin sind, und …
  • ver­wen­de die­sen Wert nie wie­der.

Über­flüs­sig zu sagen, dass auch die ande­ren Varia­blen über­haupt nicht ver­wen­det wer­den. Tja…

Will­kom­men in der Rea­li­tät! (Flucht­mög­lich­kei­ten sind nicht aus­ge­schil­dert.)

(Nach­trag: Zum The­ma: devopsreactions.tumblr.com, codinghumor.tumblr.com uvm.)

Ruby on Rails: perform_caching und Flash-Mel­dun­gen

Bei einem Ruby-on-Rails-Pro­jekt funk­tio­nier­te lokal alles — aber in der Umge­bung pro­duc­tion (unter nginx) ver­schwan­den die Flash-Mel­dun­gen (zum Bei­spiel nach dem Log­in über Devi­se) nicht mehr — bezie­hungs­wei­se erst, als eine Sei­te gerän­dert wur­de, die von einem ande­ren Con­trol­ler ver­wal­tet wird.

Da das Pro­jekt Devi­se teil­wei­se per Ajax nutzt und die eini­ge Flash-Mel­dun­gen selbst aus­gibt, dach­ten wir erst an alles ande­re; bis wir, als uns nach etli­chen Stun­den Debug­ging lang­sam die Optio­nen aus­gin­gen, wir ein­fach mal den Inhalt der deve­lop­ment- und pro­duc­tion-Datei­en in config/environments aus­tausch­ten. Und sie­he da, das Pro­blem war weg.

Der Grund des Pro­blems war fol­gen­de Ein­stel­lung:

config.action_controller.perform_caching = true

Nach­dem wir sie in pro­duc­tion auf fal­se gesetzt haben, funk­tio­nier­ten die Flash-Mel­dun­gen wie­der.  Rück­bli­ckend ist das eigent­lich klar, aber dar­auf zu kom­men, hat gedau­ert.

Mer­ke daher: Gibt es Pro­ble­me mit dem Anzei­gen von Flash-Mel­dun­gen, immer auch an die­se Caching-Ein­stel­lung den­ken.