2010-06-16 12 views
1

J'ai une application rails, avec un modèle qui est une sorte de référentiel. Les enregistrements stockés dans la base de données pour ce modèle ne sont (presque) jamais modifiés, mais sont lus en permanence. De plus, il n'y en a pas beaucoup. Je voudrais stocker ces enregistrements dans le cache, de manière générique. Je voudrais faire quelque chose comme acts_as_cached, mais voici la question que j'ai:Mise en cache des modèles dans les rails

  • Je ne peux pas trouver une documentation décente pour les actes en cache (je ne puis trouver son dépôt)

  • I ne veut pas utiliser memcached, mais quelque chose de plus simple (variable statique, ou quelque chose comme ça).

Avez-vous une idée de ce que je pourrais utiliser pour faire cela?

Merci

EDIT

Je cherche toujours quelque chose de similaire à cache_flu mais sans memcached

Répondre

0

acts_as_cached a été remplacé par cache_fu.

+0

Y at-il quelque chose de similaire à cache_fu qui n'utiliserait pas memcache mais quelque chose de plus simple? – Arthur

0

Vous pouvez stocker des données dans le cache par défaut des rails ou, comme cela semble être le choix le plus populaire, utilisez mem_cache_store qui utilise memcached.

#production.rb 

config.cache_store = :mem_cache_store, '127.0.0.1:11211', {:namespace => "production"} 

#some_helper.rb 

def get_some_data 
    Rails.cache.fetch('some_reference'){Model.find_some_data} 
end 

Voir aussi: http://guides.rubyonrails.org/caching_with_rails.html

De plus, si vous utilisez passagers, vous devez faire ceci:

if defined?(PhusionPassenger) 
    PhusionPassenger.on_event(:starting_worker_process) do |forked| 
    if forked 
     Rails.cache.instance_variable_get(:@data).reset if Rails.cache.class == ActiveSupport::Cache::MemCacheStore 
    else 
     # No need to do anything. 
    end 
    end 
end 
+0

Comme je l'ai dit, je ne veux pas utiliser memcached, c'est trop lourd à mettre en place. Je veux quelque chose de simple. – Arthur

+0

Je suppose que SQL Caching améliore beaucoup les performances dans mon cas. Je n'aurai probablement pas besoin d'autre chose, mais ce serait cool d'avoir quelque chose comme cache_flu qui fonctionnerait sans memchach – Arthur

1

Pourriez-vous stocker les données dans un fichier et le charger en une constante (comme suggéré sur Ruby on Rails: Talk):

require "yaml" 
class ApplicationController < ActionController::Base 
    MY_CONFIG = YAML.load(File.read(File.join(RAILS_ROOT, "config", "my_config.yml"))) 
end 
1

J'ai démarré une gemme nommée cache_me qui peut fonctionner avec n'importe quel cache_store

c'est en mode Alpha mais vous pouvez essayer, puis ouvrir une demande de pull/Problèmes.

https://github.com/arunagw/cache_me

Je vais vous laisser savoir quand il est prêt à utiliser le mode plein.

Questions connexes