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.confパラメーターで定義されたものapplication.staticBaseUrlを返す静的メソッドを使用することを考えていました。/public/{here}http://static.mydomain.com/{here}

しかし、それが最善の方法であるかどうかはわかりません。また、それを行うためのより良い方法がまだない場合も同様です。

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 に答える