2011-11-18 8 views
7

Heroku Cedarにワニスが提供するHTTPキャッシュがないとすれば、Rack::Cacheを使いたいと思います。 私は3.1.1がデフォルトでアクティブRack::Cacheを持つレールと言われてきた、私はちょうど構成で持っていることを確認する必要があります。Rails 3.1とHttpページのキャッシュ

config.action_controller.perform_caching = true 

と私は私はこの実験のために、キャッシュストアを選択する必要があります使用:Varniで正常に動作するために使用

response.header['Cache-Control'] = 'public, max-age=300' 
response.header['Expires'] = CGI.rfc1123_date(Time.now + 300) 

このコード:私は、私は次の行を追加したキャッシュしたいページの作用で

config.cache_store = :memory_store 

を最初のリクエストは200を返し、その後の(5分間の)リクエストは304を返します。

これは、Rails 3.1とHeroku Cedar Stackでは発生しません。 これらのヘッダーは応答に含まれますが、後続の要求では304の代わりに200が返されます。

私は間違っていますか?ありがとうございました。

答えて

11

上記のとおり、Cedarスタックはワニスを使用していません。これは、Webリクエストが常にRubyサーバにヒットすることを意味します。

これを念頭において、Rack :: Cacheはヘッダーを尊重し、キャッシュされたコンテンツを配信します。

しかし、要求が実際にhttp層を通過してrailsアプリに入るので、キャッシュはhttp層でもはや発生しないため、応答は常に200になります。

これが真実であることを確認するために、あなたのキャッシュされたアクションのいずれかでこれを挿入します、そして、

<%= Time.now.to_i %>

ページを数回リロードして、あなたはタイムスタンプが変更されませんわかります。

+0

あなたは正しいです!!!!わずかに高いレベルでキャッシュする方法はありますか?その価値はありますか? (たとえば、railsアプリケーションの前にconfig.ruにrack :: cacheを設定するとどうなりますか?) – soulnafein

+0

Rack :: Cacheはあなたの最善の策です。あなたの環境でできるだけ高いところに置くだけで、必要なパフォーマンスが得られるはずです.Railsの全httpスタックを避ける必要があります。 – leonardoborges

+0

ああ、私はそれがあなたを助けた場合、元の答えを投票することができれば感謝します:) – leonardoborges