Tengo una aplicación Rails bastante grande, que usa memcached en un servidor separado como su almacén de memoria caché.¿Rieles con Memcache devolviendo el objeto en caché incorrecto?
El problema es que obtengo al azar errores en el entorno de producción que parecen para indicar que memcached está devolviendo un objeto incorrecto.
Ejemplos:
En este ejemplo, current_site
es un método de ayuda que accede a un método en el modelo Site
que utiliza Rails.cache para almacenar en caché el modelo
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:
en contraste con ....
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:
Cuando ambos se deben de devolver un modelo Site
!
Otro ejemplo de caché comporta de forma extraña:
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>
Alguien ha encontrado algo como esto antes? ¿Alguien tiene ideas para diagnosticar este problema irreplicable? Intenté desconectar gemas de memcached client, pensando que tal vez era un error extraño, ¡pero esto no tuvo ningún efecto! Gracias.
¿Esto sucede en el entorno de producción o en el modo de desarrollo? – pauliephonic