memcache在使用acts_as_cached插件时获取错误的值

我已经安装了memcached gem和acts_as_cached插件。

我的模特很少

class Bike <ActiveRecord :: Base
acts_as_cached
……….
结束

class Car <ActiveRecord :: Base
acts_as_cached
……….
结束
像这样我有更多的模特

自行车。 get_cache (“key”){Bike.find(…)}
汽车。 get_cache (“key”){Car.find(…)}

即使我维护不同的键,它取出错误的对象而不是必需的对象。

Phusion Passenger通过分支现有流程生成新服务器。 之后,不同的进程共享代码。 一方面,与例如mongrel服务器相比,这节省了大量内存。 另一方面,如果未正确重置连接,则可能会混淆memcached。

当用户会话混乱时,我曾经有类似的经历。 真可怕。

这个问题有两种解决方案:

1)配置乘客使用“保守产卵”代替“智能产卵”。 但是,你将完全放弃共享内存的优势。 要么

2)如果Passenger产生新的服务器进程,请确保重新设置memcached连接。 我使用以下代码来执行此操作。 将它放入config/initializers/memcached_reset.rb

 if defined?(PhusionPassenger) PhusionPassenger.on_event(:starting_worker_process) do |forked| if forked # Close duplicated memcached connections - they will open themselves Rails.cache.instance_variable_get(:"@data").try(:reset) if Rails.cache.instance_variable_get(:"@data").respond_to?(:reset) end end end 

在这篇博文中找到一个稍微不同的例子。