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错误LoadError Expected x.rb to define X

今天将代码部署到服务器上之后出现了这个奇怪的错误,经过删除gems重装之后问题依旧,最后查找资料,发现可能是 requireclass 之间的问题,最后在今天写的代码中发现了我在某个model的文件开头require了一个包。将require移入class定义内该问题解决。
原来代码如下:

修改后:

这个问题产生的原因我还不是非常清楚,难道和ruby的语法或者是内部运行机制和rails有冲突么?
这个问题在Rails的BUG列表中依然存在争议,目前还没有被彻底解决


2007-12-11更新

今天在我更新了服务器后,服务器上又出现了这个问题,但这次换了一个文件,变成了account.rb。这台服务器上装的是CentOS3,而另外一台同步更新的Windows2003服务器,则没有出现这个情况。多次修改找不出原因也不能解决问题,最后通过重启服务器解决了问题……

重新看了Rails Trac上的问题,发现情况并不是那么简单,很多条件可以造成这个错误,而问题的解决也是非常奇怪,比如有个人出现错误后,将某个设置从true改为了false,便正常了,然后他又把设置改回true,但是错误就没有了。