更改有关环境的静态URL

时间:2012-10-09 08:27:04

标签: url static playframework-2.0

使用Play Framework 2.0.4,我想以不同的方式定义静态内容URL。

在DEV模式下,它将是/ public / {here},因此使用默认配置

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

很好,但在PROD中,我想使用http://static.mydomain.com/基本网址。

起初,我考虑过像这样更改资产:

 GET     /public/*file               controllers.Assets.at(path="http://static.mydomain.com/", file)

但当然,我不行:p

所以我在考虑使用一个静态方法,该方法会在application.conf文件中查找application.staticBaseUrl参数,并返回/public/{here}http://static.mydomain.com/{here}或任何定义的内容在application.conf参数中。

但是我不确定这是不是最好的方式,如果还没有更好的方法,那也不是。

你能指导我吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

您可以在Application控制器中添加静态包装器:

public static String wrapLink(play.mvc.Call uri) {
    return wrapLink(uri.toString());
}

public static String wrapLink(String uri) {
    return (Play.application().isDev()) ? "/public" + uri : "http://domain.tld" + uri;
}

因此您可以在视图中使用它:

link from String:
    @Application.wrapLink("/bootstrap/css/bootstrap.min.css")

or from Call
    @Application.wrapLink(routes.Application.index)

扩展版

我在使用多个CDN时也使用了扩展版本(即使用虚拟子域-CDN来加快资源下载速度):

Application.conf

cdn.cdn1="http://cdn1.domain.tld"
cdn.cdn2="http://cdn2.domain.tld"

控制器:

public static String wrapLink(String cdnId, String uri) {
    return (Play.application().isDev()) 
        ? "/public" + uri 
        : Play.application().configuration().getString("cdn."+cdnId)+ uri;
}

视图:

@Application.wrapLink("cdn1", "/bootstrap/css/bootstrap.min.css")
@Application.wrapLink("cdn2", "/images/abc.jpg")