ruby-on-rails – 带有Memcache的Rails返回错误的缓存对象?

我有一个相当大的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:

两者都应该返回站点模型!

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

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客户端宝石,想想也许这是一个奇怪的错误,但这没有任何影响!谢谢.

解决方法

这是由Passenger共享其与Memcached服务器的连接引起的.检查 http://www.modrails.com/documentation/Users%20guide.html#_example_1_memcached_connection_sharing_harmful.

修复只是将Passenger的Rails变成保守派.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...