Использование memcache в приложении Rails 3 - PullRequest
1 голос
/ 27 апреля 2011

Вам нужно добавить код в приложение Rails, чтобы использовать memcache? Я добавил config.cache_store = :dalli_store в свою производственную среду и Rails.cache.write('color', 'red') работает.

Я не вносил никаких изменений в свои модели, виды или контроллеры. Когда я создаю и сохраняю объект, например

user = User.new
user.name = 'John Doe'
user.email = 'john@doe.com'
user.save

это идет прямо в базу данных и не идет в memcache. Я надеялся, что activerecord будет использовать memcache автоматически, если настроено для него. Разве это не так? Любые хорошие статьи о переписывании ваших моделей для использования Rails.cache (или это должно быть сделано в контроллере)?

1 Ответ

3 голосов
/ 27 апреля 2011

config.cache_store будет использоваться только для настройки хранилища, используемого при записи и получении кэша.Это полностью отделено от хранилища данных вашей модели.

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

Вы пытаетесь заменить базу данных ActiveRecord, такую ​​как MySQL, на memcached?Запись в memcached при создании новой записи вместо записи в базу данных?

ОБНОВЛЕНИЕ НА ОСНОВЕ ВАШЕ КОММЕНТАРИИ

cache_money выполняет write_through с помощью обратных вызовов activerecord.
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Посмотрите на строку 15-17, и вы увидите, где они вызывают обратные вызовы после: https://github.com/nkallen/cache-money/blob/master/lib/cash/write_through.rb

Вы можете выполнить то, что вам нужно, таким же образом.Просто закодируйте пользовательский метод и сделайте его доступным для ваших моделей.Затем вызовите метод с помощью after_create, after_update, after_destroy в модели.Если вы хотите, чтобы это произошло со всеми моделями, вы, вероятно, могли бы сделать это в инициализаторе:

#UNTESTED, but should be close
ActiveRecord::Base.descendants.each do |model|
  model.class_eval do
    after_create :your_cache_method
    #... other callbacks
  end
end

Затем вы можете закодировать модуль с вашим параметром your_cache_method и включить его в ActiveRecord :: Base, чтобыбудет доступен для всех моделей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...