Monthly Archive for November, 2008

ActiveSupport::Memoizable Cache löschen

Auch wenn es vielen von vorn herein klar ist, mir war es nicht sofort klar :)

Das tolle Memoizable in Rails 2.2 macht das Caching von Methoden einfacher. Ich bin dabei auf eine Frage gestoßen:

Wie lösche ich den Cache?

Als ich mir den Quellcode von Memoizable angeschaut habe, dachte ich auf den ersten Blick, dass memoize_all ALLE Methoden einer Klasse memoizen würde und unmemoize_all alles wieder deaktiviert.

Nun, tatsächlich löscht unmemoize_all nur den gesamten Cache und er wird automatisch mit jedem Aufruf einer Methode Stück für Stück wieder aufgebaut. Wenn man also z. B. eine Änderung vornimmt, sollte man unmemoize_all ausführen.

memoize_all hingegen, führt alle gecachten Methoden auf einmal aus (!) und speichert die Ergebnisse im Cache. Aber das kann doch nicht sein, oder? Kann mir das hier mal jmd. erklären :)

Rails 2.2: NoMethodError von create_time_zone_conversion_attribute?

Nachdem ich jetzt mehrere Stunden nicht verstanden habe, wieso meine Rails Applikation nur einen Klick lang funktioniert, möchte ich euch dran teil haben lassen. Ich habe mehrere Libraries und Plugins die alle meine Models erweitern und dachte schon es läge daran, dass immer dieser Fehler auftauchte:


You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.include?

Recherche brachte mich hier her:
http://rails.lighthouseapp.com/projects/8994/tickets/1339

Das ganze lag nur daran, dass in Rails 2.2 ein Bug ist, der einen ein ActiveRecord Model nicht in eine Konstakte packen lässt!

Ich hatte eine Config-Datei die

1
MEINMODEL = MeinModelName

machte und später im Controller dann

1
MEINMODEL.find(....

Und das darf man nicht :) Jedenfalls noch nicht.