Rails + Memcached = Undefined Class/Module?

问题描述:
当使用memcached并将Model对象保存在其中时,若要取出这个缓存对象时,可能会找不到Model的类,并抛出“Undefined Class/Module SomeClass”的错误。
例如:

解决方案
要解决这个问题,可以在引用到该对象之间,先引用其类。比如,在前面的代码前面加入要引用的类Genre:

还有更好地方法是在Controller的before_filter中加载所依赖的所有Model:

结论
这个问题应该是Rails的一个Bug,不知道在2.0中有没有解决。我猜测是因为Rails中很多类信息是lazy load的,而从memcached中取出时没有附带类信息,也不知道如何加载,而通过上面的方法预先加载所需的类和其相关的类的信息,便解决了这个问题。

“Rails + Memcached = Undefined Class/Module?”的2个回复

  1. 只有在development环境才会出现这样情况吧。development环境下所有model都是延迟加载的。ruby在从memcache里取东西时都要进行反序列化。如果类还没定义时就会抛这个错误。
    最简单的办法是初始化时候就把所有model加载一遍:
    Dir.glob(Rails.root.join(“app/models/*.rb”).to_s){|file| load file}

发表评论

电子邮件地址不会被公开。 必填项已用*标注