我在我的Rails应用程序中使用Memcached作为Object Store,我在其中存储了memcached中User对象的搜索结果
现在,当我获取数据时,我得到了Memcached Undefined Class / Module Error.我在这个博客中找到了解决这个问题的方法
http://www.philsergi.com/2007/06/rails-memcached-undefinded-classmodule.html
- before_filter :preload_models
- def preload_models
- Model1
- Model2
- end
建议事先预装模型.我想知道是否有一个更优雅的解决方案来解决这个问题,并且使用预加载技术有任何缺点.
提前致谢
解决方法
我也有这个问题,我想我想出了一个很好的解决方案.
- module ActiveSupport
- module Cache
- class MemCacheStore
- # Fetching the entry from memcached
- # For some reason sometimes the classes are undefined
- # First rescue: trying to constantize the class and try again.
- # Second rescue,reload all the models
- # Else raise the exception
- def fetch(key,options = {})
- retries = 2
- begin
- super
- rescue ArgumentError,NameError => exc
- if retries == 2
- if exc.message.match /undefined class\/module (.+)$/
- $1.constantize
- end
- retries -= 1
- retry
- elsif retries == 1
- retries -= 1
- preload_models
- retry
- else
- raise exc
- end
- end
- end
- private
- # There are errors sometimes like: undefined class module ClassName.
- # With this method we re-load every model
- def preload_models
- #we need to reference the classes here so if coming from cache Marshal.load will find them
- ActiveRecord::Base.connection.tables.each do |model|
- begin
- "#{model.classify}".constantize
- rescue Exception
- end
- end
- end
- end
- end
- end