2012-06-15 48 views
1

我喜欢LESS css和Google Closure编译器对Play 2的支持。有没有办法添加对自动版本控制的支持,以便我不必担心每次重命名文件时做出改变。 社区中的其他人如何处理此问题?PlayFramework 2.0.1资产版本

回答

1

我认为这是您正在谈论的缓存问题。如果这是你正在讨论的版本化问题,那么这是git或mercurial等Version Control System的工作。

您将对每个静态资源都有这个缓存问题。

为了让网页快速显示在客户端(和以具有静态内容在服务器端没有这么多的请求),您将添加Cache-Control和Etag的问题你的HTTP响应指令。浏览器会从缓存中获取这些静态资源。

但是,如果您更改logo.png(例如更改您的公司徽标),因为此图像存储在浏览器缓存中,用户将看不到您的新徽标。

解决方案

我看到该两种解决方案:

  • 播放用的eTag和高速缓存控制指令,让用户请求新的静态资源每隔X天。我使用前端服务器(例如Nginx)执行此操作,但您也可以使用该支持(详细的here
  • 创建包含资源版本的假冒query parameters。例如,您可以有http://www.mydomain.com/public/images/logo.png?v=1.2。如果更改v参数,浏览器将不会从缓存中检索它。在服务器端查询参数不会改变任何东西,服务的资源将被再次缓存。

我在附加到所有静态资源的application.conf中使用了配置参数的第二个解决方案。这假设当你更新一个资源时,所有的资源都会重新加载(通常,当你改变你的图片时,你也会改变你的CSS,为什么不改变你的js文件......)

+0

你能提供一个有关你为#2做了什么的更多细节?你是否重命名文件?我们可以看到你在application.conf中放置了什么吗? – KVISH

+1

在application.conf中:application.version = 1.2。在您的模板中:。这是想法,你可以创建你的方法或隐式参数使它更容易使用。 – iwalktheline

+2

据我所知,一些代理服务器拒绝在URL中使用'?'来缓存任何东西。因此,您可以考虑将URL的版本部分改为URL路径,例如:'server/assets//logo.png'。 – KajMagnus