2016-03-22 7 views
0

私のアプリケーションは、内部サービスから同じイメージを絶えずダウンロードしてホストすることになっています。私はイメージを取得する予定の俳優を実装することでそれを実装しました。Play 2とキャッシングアセット

GET  /public/*file  controllers.Assets.at(path="/public", file) 

しかし、私はhttp://server/public/assets/image.pngを介して画像にアクセスしようとするいくつかの理由で、私は更新が表示されない:それは、私は、このデフォルトルートが設定されている/public/analytics下のものを配置します。私は問題はそれがキャッシュされていると思う。私が私のホストの中に入ると、私は/public/analyticsにある更新されたイメージを見て、それがキャッシュされるはずです。

私はGlobalにこれを追加しようとしました:

override def doFilter(action: EssentialAction): EssentialAction = EssentialAction { request => 
    import play.api.http.HeaderNames 
    action.apply(request).map(_.withHeaders(
     HeaderNames.CACHE_CONTROL -> "no-cache", 
     HeaderNames.PRAGMA -> "no-cache" 
    )) 
    } 

しかし、結果は同じです。さらに、画像URLを取得すると、no-cacheヘッダーが表示されます。私は毎回新しいURLを生成する提案を見ましたが、私はそれを行うことはできません。

何が間違っている可能性がありますか?

答えて

0

Assetsコントローラを使用するとすぐに、you're getting caching, compression, etc support "out of the box" - 実際には必要ありません。

あなたが発見してきたように、それはので、おそらくこの問題を解決するための最も簡単な方法は、所定の位置にキャッシュを残すことで、他のソースからコンテンツを果たすために非常に便利な方法ですが、すべてため非常に短いmax-ageを指定します。

source of Assetsを見ると、assets.defaultCacheを指定した場合のように見えます。すなわち、あなたのapplication.conf中:

だけ新しいものを求める前に、30秒間の資産を保有する標準尊重ブラウザを意味
assets.defaultCache="public, max-age=30" 

。最適な効率を得るには、スケジュール検索アクターの期間と一致させることができます。

+0

残念ながら、これは機能しません - 私は30秒待っても、私はまだ古い画像を取得しています。私はキャッシュをオフにしようとしました。私が答えに載せたコードを見てください - そして私はまだ古いイメージを残しています。通常の「アクション」でイメージ検索を実装したときにのみ、反応させることができましたが、このアプローチが良いとは確信していません – Archeg

+0

3時間後でもまだ古いイメージが残っているという奇妙なことです。これを引き起こす可能性のあるキャッシュ以外のものはありますか? – Archeg

関連する問題