我有一个相当大的Rails应用程序,它使用单独服务器上的memcached作为缓存存储。
问题是,我在生产环境中随机获得错误,这似乎表明memcached返回了一个不正确的对象。
示例:
在本例中,current_site是一个帮助方法,它访问Site模型上的一个方法,该方法使用Rails.cache缓存模型。
ActionView::TemplateError in ListingsController#edit
undefined method `settings' for #<String:0xb565f8a0>
On line #12 of app/views/layouts/site.html.erb
9: <meta name="robots" content="noodp, all" />
10: <meta name="distribution" content="Global" />
11:
12: <% unless current_site.settings[:google_webmaster_verification_code].blank? %>
13: <meta name="verify-v1" content="<%= current_site.settings[:google_webmaster_verification_code] %>" />
14: <% end %>
15: 与.形成对比。
ActionView::TemplateError in ApplicationController#not_found
undefined method `settings' for #<Category:0xd5c6c34>
On line #12 of app/views/layouts/site.html.erb
9: <meta name="robots" content="noodp, all" />
10: <meta name="distribution" content="Global" />
11:
12: <% unless current_site.settings[:google_webmaster_verification_code].blank? %>
13: <meta name="verify-v1" content="<%= current_site.settings[:google_webmaster_verification_code] %>" />
14: <% end %>
15: 当两者都应该返回一个Site模型时!
另一个缓存行为奇怪的例子:
ActionView::TemplateError in AccountsController#show
can't convert Category into String
On line #141 of app/views/layouts/site.html.erb
138: <li<%= class="first" if i == 0 %>><%= link_to top_level_category.title, top_level_category.path %></li><% end %>
139: </ul>
140: <% end %>
141: <% cache bottom_pages do %>
142: <ul><% Page.top_level.active.show_in_navigation.find(:all, :include => :slugs).each_with_index do |top_level_page, i| %>
143: <li<%= class="first" if i == 0 %>><%= link_to top_level_page.title, top_level_page.path %></li><% end %>
144: </ul>以前有人遇到过这样的事吗?有人想诊断这个不可复制的问题!?我尝试过切换memcached客户端宝石,认为这可能是一个奇怪的错误,但这没有任何效果!谢谢。
发布于 2009-04-13 20:05:22
这是由于乘客共享到Memcached服务器的连接造成的。检查有害的。
修复方法只是将乘客的Rails转换为conservative。
发布于 2009-04-09 17:43:26
一些可能有帮助的事情:
current_site中,以查看确切的返回内容。memcached-tool host:port dump > /tmp/keys查看内存缓存中的实际内容。发布于 2010-11-17 22:57:46
我也遇到了这个问题,并解决了在缓存提供程序解除封送操作之前为每个类/模型添加require_dependency。也许在生产环境中,这是不必要的,因为选项: config.cache_class被设置为true,但是在测试和开发中它是假的。
实际上,Memcache (是我正在使用的缓存提供程序)找不到引用的类来进行解组,然后引发此错误。
在这篇文章中有一个更好的解决这个问题的方法:http://kballcodes.com/2009/09/05/rails-memcached-a-better-solution-to-the-undefined-classmodule-problem/
致以问候!
https://stackoverflow.com/questions/734664
复制相似问题