2011-12-29 2 views
1

私のherokuウェブサイトのルートページは本質的に静的で、生成されたときにビューにルビコードがいくつかありますが、単一のユーザーに特有のものは何もないので、ワニスによってキャッシュされ、私のdynoを打つことなく(アプリケーションに動的な他のページがあることに注意してください)。Heroku&Rails - ワニスHTTPキャッシュが動作しない

ヘロクはとてもシンプルに見えます。hereresponse.headers['Cache-Control'] = 'public, max-age=300'を追加すると、再生する前に5分間キャッシュされます。

これをテストするために、私は変更して、そのページに日付(Time.now)を出力し、5分間同じになるかどうかを確認しましたが、新しいブラウザでそのページにアクセスするたびに更新されます。同じブラウザでのリフレッシュはうまくいきますが、私はそれがHerokuではなくブラウザのキャッシュであると考えています。

それは任意のヘルプ、私はHTTPヘッダを取得するには、カール-iを行うとき、私はこれを取得だ場合:

HTTP/1.1 200 OK^M 
Server: nginx/0.7.67^M 
Date: Thu, 29 Dec 2011 02:03:33 GMT^M 
Content-Type: text/html; charset=utf-8^M 
Connection: keep-alive^M 
Cache-Control: public, max-age=300^M 
X-Ua-Compatible: IE=Edge^M 
Etag: "8a1b58f048968803980417a2914764d0"^M 
X-Runtime: 0.038393^M 
Content-Length: 8310^M 
X-Varnish: 1040651825^M 
Age: 0^M 
Via: 1.1 varnish^M 

基本的に、私はそれが一度生成し、その後にキャッシュされていていることを確認したいのですがワニス、オプションがありません。何かを設定する必要はありますか?高速の静的なページを提供するための他の提案がある場合は、それらも好きです。

ありがとうございます!

+0

また、いくつかのbefore_filtersを追加する認証システムがありますが、メインページの出力には影響しません。 –

+0

あなたはAspenまたはBambooスタック上で稼動していることを確認できますか? –

+0

うん、杉の上ではない。 –

答えて

0

Herokuは、ページがすべてのサーバーにキャッシュされるまで約10-15ページのリフレッシュが必要になります。その後、キャッシュされたままになります。それはすべての仕事をしていた、私はちょうどいくつかのリフレッシュが機能しなかった後にあきらめた。

また、max_ageを増やすことで、より明確に理解できるようになりました.5分のキャッシュはほとんど効果がありません。

1

ブラウザでテストするときにCookieを送信している可能性がありますか?リクエストヘッダーは何ですか?

実行カール-I http://host.com/を2回実行するとどうなりますか?

+0

ブラウザでテストしているときにクッキーを送信しても問題ありませんか?クッキーの有無にかかわらずキャッシュを磨くべきではないでしょうか? –

+0

curl -lを2回実行すると同じ結果が得られ、 –

+1

ヘロクのワニスがどのように設定されているのかわかりませんが、VCLファイルへのアクセス方法がわかっていたり、ここに投稿しておくと便利ですが、デフォルトのVCLファイルでは、要求をバックエンドに渡すように設定されていますクッキーがある場合は、あなたがあなたのウェブサイトで認証され、キャッシュされたページを取得したくない可能性が高いため、あなたの個人情報があればそれを見ることができるからです。 –

3

この問題を引き起こしているアプリケーションに何かがあります(ヘッダが正しく設定されていない可能性があります)。ことは、この私は1つのキャッシュされたが含まれているアプリケーション、および1非キャッシュされたページ(出力にテキストを描画する以外の何を置く。

http://morning-earth-1972.heroku.com/base/cache

http://morning-earth-1972.heroku.com/base/no_cache

をお知らせをテストする

キャッシュバージョンは印刷されてから5分以内に変更されません。

ソースはここにあります:https://github.com/neilmiddleton/heroku_varnish_test_SO_8663326

したがって、Herokuは期待どおりに動作しています。私は最初に、キャッシュされたページが完全に保護されていることを保証するために、何かをしていないことを確認するためにあなたの認証システムを調べます。

+0

私の認証システムにはbefore_filterがありますので、キャッシュできませんか? –

+0

それはbefore_filterがやっていることに依存します.. –

+0

興味深いことに、私の問題は、Herokuが複数のVarnishサーバーを持っているため、それぞれにキャッシュするために多くのヒットを必要とすることが原因と考えられます。何もキャッシュされなかったので、私は数回リフレッシュしてから諦めました。実際には10〜15回程度リフレッシュする必要がありますが、その後は正常に動作します。興味深いことに、あなたの実装は、おそらくHerokuがバックエンドで行っていることが原因で、おそらくそれで苦しんでいないようです。 –

関連する問題