Das Plugin Settings für Rails wird in meinen Applikationen stark verwendet.
Z.b. werden Informationen die im Layout verarbeitet werden auch mit gehalten. Dies belastet daher stark die DB. Um die Zugriffe zu minimieren, habe ich eine kleine Änderung im Plugin vorgenommen:

Wir definieren zunächst folgende neuen Globalen variablen:

@@use_cache = true
@@cache = {}

Danach diese neuen Methoden:

def self.use_cache(use_cache=true)
if(use_cache == true)
@@use_cache = true
else
@@use_cache = false
@@cache = {}
end
end

def self.use_cache?
return @@use_cache == true
end

Und nun ändern wir die Methode def self.object(var_name) so ab:

def self.object(var_name)
if use_cache?
set = @@cache[var_name.to_s]

if set.nil?
set = Setting.find_by_var(var_name.to_s)
if(!set.nil?)
logger.debug “Putting Setting in cache: ” + var_name.to_s
@@cache[var_name.to_s] = set
end
end
else
set = Setting.find_by_var(var_name.to_s)
end

set
end

Und schon wieder etwas verbesserte Performance ;)

PS: Ja, ich weiß dass Caching mit z.B. MemCache auch eine Möglichkeit ist, man hat halt nur nicht immer nen MemCache am laufen und Settings werden bei mir eigentlich in jedem Projekt verwendet, wodurch die Lösung hier am besten war!

Anmerkung: siehe für MemCached: http://frederico-araujo.com/2007/12/13/make-your-rails-app-faster-with-memcached-part-1

convert this post to pdf.