私はかなり大きなRailsアプリを持っています。これは、別のサーバー上のmemcachedをキャッシュストアとして使用します。
問題は、本番環境でランダムにエラーが発生することです。これは、memcachedが誤ったオブジェクトを返していることを示しているようです。
例:
この例では、 Rails.cacheを使用してモデルをキャッシュするモデルcurrent_site
上のメソッドにアクセスするヘルパーメソッドです。Site
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クライアントgemを切り替えてみましたが、これは奇妙なバグかもしれないと思いましたが、効果はありませんでした。ありがとう。