0

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

在 DEV 模式下,它会是 /public/{here},所以使用默认配置

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

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

起初,我想像这样更改资产:

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

但是,当然,它不起作用。

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

但我不确定这是否是最好的方法,也不确定是否还没有更好的方法。

4

1 回答 1

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")
于 2012-10-09T09:36:58.440 回答