4

Rails 3.1では、キャッシュメカニズムをconfig/environments/*.ymlに指定できます。今度は、:file_storeに設定すると、例えばDragonflyの画像をキャッシュするのに適していますが、もちろん他のすべてのものもファイル(アクション、フラグメントなど)としてキャッシュされます。1つのRails 3.xアプリケーションで2つの異なるキャッシュストアを使用する方法はありますか?

ここで、1つのアプリケーションで2つの異なるキャッシュストアを使用する方法があります。たとえば、Dragonflyのすべてが:file_storeに保存されていますが、それ以外はMemcacheに保存されますか?

+0

あなたは[この記事] [1]を見ましたか? [1]:http://stackoverflow.com/questions/729670/how-to-use-multiple-caches-in-railsヘッドアップ、@Ekamppため – Ekampp

+0

おかげで - しかし、それはdoesnの私がMemcacheを有効にするとすぐに、Dragonflyがそこに画像をキャッシュし始めることを意味するので、Dragonflyのキャッシュはページキャッシュではないので、本当に私に当てはまります。そして、私はRack :: Cacheの方法があるかどうか不思議だったので、おそらくワニスは必要ないかもしれません... –

答えて

2

言い換えれば、はい。

Rack::Cacheseparates cache entries intoMetaStoreおよびEntityStore。メタストアを強くお勧めし 用のメモリベースのストレージの実装(ヒープまたはmemcachedの)を使用して

、ディスクベースのストレージ 実装(ファイル)は、多くの場合、EntityStoreと にとって満足である間は、はるかに少ないメモリを使用しています。

dalli gemmemcachedの推奨構成を次に示します。

config.cache_store = :dalli_store 
config.action_dispatch.rack_cache = { 
    :metastore => Dalli::Client.new, 
    :entitystore => URI.encode("file:#{Rails.root}/tmp/cache/rack/body"), 
    :allow_reload => false 
} 

代替メモリストアは、あなたが@jodosharedis-storeを使用して設定することができ、Redisです。


あなたの質問のタイトルに基づいて、人々は、最も低いレイテンシーの順でチェーンの複数のキャッシング層への道を探してここに到着するかもしれません。

この機能性は、@jchcascade-storeで提供され、別のcustom rails cache storeです。レールの例:

config.cache_store = [:cascade_store, :stores => [ 
    [:memory_store, :size => 5.megabytes, :expires_in => 15.minutes], 
    [:mem_cache_store, 'localhost:11211'], 
]] 
+0

Herokuのユーザーは[関連記事を読む]こともできます(https://devcenter.heroku.com/articles/rack-cache-memcached-static-assets-rails31)を使用します。 –

+0

答えをありがとう。 ':metastore' /':entitystore'の設定は私にとってはニュースでした。あなたの最初の例を正しく読めば、action/fragmentキャッシングは ':dalli_store'を使いますが、Rack :: Cacheはそれ自身の設定に従います。 –

関連する問題