Play Framework で "play run" が設定ファイルを読み込まない現象について

Play Framework 2.1.x で “play run” が指定した設定ファイルを読んでくれない現象に遭遇した。具体的に言うと、次のようにしても dev.conf が無視される。 $ play "run -Dconfig.resource=dev.conf" これが “play start” のときに同じ指定をすると有効になるのだから、訳が分からない。Stack Overflow で尋ねてみたところ config.resource ではなく config.file を試してみてはどうかと言われた。これは上手くいった。次のようにするのである。 $ play "run -Dconfig.file=conf/dev.conf" 正直な所、なぜ config.resource が無視されて config.file だと指定通りに動くのかよく分からない。上記の Stack Overflow で回答した方が示してくれた Play Framework のコードスニペットへのリンクも、あまり関係ないように思える。 他にもこの件でハマった人がいるようである。 NOTE: At the time of writing (Play 2.0.2) I can’t get config.resource to work when starting app in dev mode (using play run). Instead one can use config.file which, if using a relative path, points to project root: play -Dconfig. [Read More]

Play framework で Set-Cookie するときに domain 属性を指定する方法

Play framework 1.2.x の場合 HTTPではレスポンスヘッダの Set-Cookie の domain属性 でクッキーが参照可能となるドメインを指定できる。例えばHTTPのレスポンスヘッダに Set-Cookie: SESSION=thisissessionid; path=/; domain=example.com のような行があれば SESSION=thisissessionid というデータは example.com の中でのみ有効となる。もしもクッキーの値を example.com のサブドメインでも使いたければ domain=example.com を domain=.example.com と変更すればよい。 Play framework 1.2.x では application.conf に application.defaultCookieDomain=.example.com という一行を加えることでクッキーの有効ドメインを変更することができる。 Play framework 2.0.x の場合 実は Play framework 2.0.x 系ではアプリケーションレベルでクッキーが参照可能なドメインを設定する手段が用意されていない。Play framework 2.0.4 の framework/src/play/src/main/scala/play/api/mvc/Http.scala で encodeAsCookie() は次のように定義されている。 /** * Encodes the data as a `Cookie`. */ def encodeAsCookie(data: T): Cookie = { val cookie = encode(serialize(data)) Cookie(COOKIE_NAME, cookie, maxAge, "/", None, secure, httpOnly) } ここで Cookie の第五引数が None で固定値になってしまっているのが問題である。これは Play framework 2. [Read More]