首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存缓存返回错误缓存对象的Rails?

内存缓存返回错误缓存对象的Rails?
EN

Stack Overflow用户
提问于 2009-04-09 15:11:04
回答 5查看 2.9K关注 0票数 7

我有一个相当大的Rails应用程序,它使用单独服务器上的memcached作为缓存存储。

问题是,我在生产环境中随机获得错误,这似乎表明memcached返回了一个不正确的对象。

示例:

在本例中,current_site是一个帮助方法,它访问Site模型上的一个方法,该方法使用Rails.cache缓存模型。

代码语言:javascript
复制
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: 

与.形成对比。

代码语言:javascript
复制
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模型时!

另一个缓存行为奇怪的例子:

代码语言:javascript
复制
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客户端宝石,认为这可能是一个奇怪的错误,但这没有任何效果!谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-13 20:05:22

这是由于乘客共享到Memcached服务器的连接造成的。检查有害的

修复方法只是将乘客的Rails转换为conservative

票数 10
EN

Stack Overflow用户

发布于 2009-04-09 17:43:26

一些可能有帮助的事情:

  • 将检测/日志记录添加到current_site中,以查看确切的返回内容。
  • 如何在memcache中指定密钥?您可能会意外地在两个不同的地方对两个不同的对象使用相同的键。
  • 使用memcached-tool host:port dump > /tmp/keys查看内存缓存中的实际内容。
  • 您的memcached在防火墙后面,没有公开在公共IP上,对吗?
票数 1
EN

Stack Overflow用户

发布于 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/

致以问候!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/734664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档