播放2并缓存资产

时间:2016-03-22 17:57:37

标签: scala playframework

我的应用程序应该不断地从内部服务下载一些相同的图像并托管它们。我通过实现一个计划检索图像的actor来实现它。它将那些放在/public/analytics下面我有这个默认路由集:

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

但出于某种原因,当我尝试通过http://server/public/assets/image.png访问图片时,我看不到更新。我认为问题在于它是缓存的。当我进入我的托管时,我看到位于/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"
    ))
  }

但结果仍然相同。此外,当我获取图片网址时,我会看到no-cache标题。我看到了每次生成新网址的建议,但我无法做到。

任何可能出错的想法?​​

1 个答案:

答案 0 :(得分:0)

只要您使用Assets控制器you're getting caching, compression, etc support "out of the box" - 但实际上您不想要它!

正如您所发现的,这是一种非常方便的方式来提供来自其他来源的内容,因此解决此问题的最简单方法是将缓存保留到位,但指定非常短{{3}为了一切

查看max-age,看起来如果指定assets.defaultCache,就可以执行此操作;即在你的application.conf

 assets.defaultCache="public, max-age=30"

这意味着尊重标准的浏览器只会在要求新资产之前保留30秒的资产。您可以将此匹配作为计划检索参与者的时间段,以获得最佳效率。