HerokuでRails、Dalli gem、friendly_id、Memcachierを使用しています。
私の問題は以前に発生した問題と似ていますが、デフォルトのRailsキャッシュの代わりにMemcacheを使い始めた後、機能しなくなりました。私はRailsのキャッシングにあまり精通しておらず、多くのことを間違って行っている(または単純なことを考慮していない)可能性が高いことに注意してください。
Production.rb
config.action_controller.perform_caching = true
config.cache_store = :dalli_store, 'mc2.ec2.memcachier.com:11211', { :namespace => 'my_app_name', :expires_in => 40.days, :compress => true, :username => 'asdf', :password => 'asdf' }
Gift#show-コントローラー
unless fragment_exist?("gift-show--" + @gift.slug)
# Perform slow database fetches etc
end
Gift#show-表示
<% cache('gift-show--' + @gift.slug) do %>
# Create HTML with lots of images and such
<% end %>
HerokuでMemcachierを使い始める前は、これは問題なく機能していました。私の推測ではfragment_exist?
、Memcachierではなく、「デフォルトのRailsキャッシュ」(違いがある場合)をチェックインします。Rails.cache.exist?("gift-show--" + @gift.slug)
代わりに使用しようとしましfragment_exist?
たが、機能しません。
特定のgift#show-viewを数回ロードして、キャッシュされていることを確認しました。Read fragment views/gift-show--cash-stash (1.3ms)
ログには、フラグメントが実際に存在することの証拠であると私が信じている(コントローラーの後で)また見ることができます。必要のないときは、遅い(4秒)gift#show-controllerを通過しているだけです。
Herokuでコンソールに入り、「Rails.cache.read('gift-show--cash-stash')
」と入力すると、応答がありません。
もう1つの独特なことは、コンソールで次のことを行う場合です。
irb(main):014:0> Rails.cache.write("foo", "bar")
=> true
irb(main):015:0> Rails.cache.read("foo")
=> nil
変ですね。
では、fragment_existの代わりに何を使用すればよいですか?これを機能させるために?