Ruby on rails Rails.cache.fetch异常:TypeError(无法被引用)

Ruby on rails Rails.cache.fetch异常:TypeError(无法被引用),ruby-on-rails,caching,Ruby On Rails,Caching,我正在使用漂亮的Rails.cache.fetch实现一些缓存。然而,在一个特定的例子中,有时我会遇到一个例外: EmloControllerindex中的类型错误 Emlo不能被引用 app/controllers/emlo_controller.rb:320:in'get_employees' app/controllers/emlo_controller.rb:356:in'prepare_json_response' app/controllers/emlo_controller.rb:

我正在使用漂亮的Rails.cache.fetch实现一些缓存。然而,在一个特定的例子中,有时我会遇到一个例外:

EmloControllerindex中的类型错误 Emlo不能被引用 app/controllers/emlo_controller.rb:320:in'get_employees' app/controllers/emlo_controller.rb:356:in'prepare_json_response' app/controllers/emlo_controller.rb:23:in“索引中的块2级别” app/controllers/emlo_controller.rb:15:in'index' 似乎在第一次尝试时,提取总是会随着上述内容而爆炸,然后只要提取在过期时间内,就可以正常工作。我知道我错过了什么,所以一双新的眼睛会很好

下面是调用缓存获取的方法:

def get_员工 这是针对AJAX刷新循环的,因此5秒缓存实际上有很大帮助 Rails.cache.fetch'emlo\u all',:expires\u in=>5.s,:race\u condition\u ttl=>1 do 条件=参数[:id]?{:user_id=>params[:id]}:nil 选择=[ “employee_locations.id作为emlo_id”, “员工位置。状态\u id”, “员工位置。备注”, “员工地点。直到”, '员工位置。更新位置', “员工位置。用户id”, “location_states.id作为state_id”, “location_states.title作为状态_字符串”, '位置\状态.字体\颜色', '位置\状态.背景\颜色', “users.displayname”, “users.email”, "users.mobile",, “用户.部门”, “users.extension”, “users.guid”, “users.dn” ].加入',' 埃姆洛 :select=>selections, :joins=>“员工位置上的左加入用户。用户\u id=用户。id左加入位置\u员工位置上的状态。状态\u id=位置\u状态.id”, :条件=>条件, :order=>'users.displayname ASC' 终止 终止
当config.action\u controller.perform\u caching=true和config.cache\u classes=false时,在开发模式下会出现此问题-似乎ActiveRecord对象无法与Rails.cache一起存储

但是,如果需要在开发模式下启用config.action\u controller.perform\u缓存来测试缓存,那么还必须启用config.cache\u类。不过,这是暂时的,因为在更改资产管道中的类或文件后,您必须重新启动开发服务器


在禁用缓存的情况下,我将使用Rails.cache.writesome_name,如果Rails.env.production?防止缓存在开发过程中崩溃。Rails.cache.read似乎没有受到影响。

根据应用程序的结构,在开发过程中可能会出现如下错误: 无法引用TypeError用户 这个错误是由一些缓存重新加载的疯狂行为引起的:一些gem植入的中间件被缓存。但在开发中,您的类通常不是。因此,某些类在某些情况下可能不可用,例如,如果您正在使用某些引擎提供的用于用户身份验证的before筛选器。您应该能够通过打开类缓存来消除上述错误。请尝试,然后重新启动服务器:

development.rb config.cache_classes=true

如果错误消失了,你就幸运了。但是,由于在开发中缓存类是不可行的,所以再次关闭类缓存并显式地要求无法引用的类。即:

top of development.rb
需要“app/models/user”

现在,我决定对最终调用此方法的操作执行caches\u操作。目前看来效果不错,但我仍有兴趣了解其他人对我经历的异常情况有何看法。我又遇到了这个问题,只有这一次使用Rails.cache.write和.read:TypeError不能被引用到声音中,就像您需要强制加载Emlo类,否则Rails不知道如何反序列化memcache中的内容一样。