kuroneko's blog

とりとめもなく気づいたことを書いていく

play framework(1.2.5)のproductionモードでwarファイルを作成したがプリコンパイルファイルができない

play framework(1.2.5)にて少しはまった事を覚書に記載。

事象としては、application.confにてモードをprodにし、warファイルを作成したにもかかわらず、precompiled配下のtemplateディレクトリができないというものです。

プロジェクトのディレクトリ構成は下記の通り(だいぶ省略)。

 myapp - app
                 - conf
                 - test
                 - template  ★デフォルトフォルダではなく作成したもの。

warファイルのコマンドは下記のような感じ。

    $play war -o <出力先> --zip --exclude .svn:test:template

 

問題だったのは--excludeにtemplateが入っている部分。

templateディレクトリはwarファイル内には含めず、他のディレクトリ配下に格納し、プロパティファイルでそこを参照する形にしていた。warファイルを作成すると、プロダクションモードだと、通常であれば、「WEB-INF/application/precompiled」配下ににjavaとtemplateディレクトリができるが、templateが作成されない。

できないと何が起こるかというと、画面にアクセスする度(最初だけ?)にログに「precompiledディレクトリにファイルがありません、動的に作成します」的なメッセージが出てしまう。実質、developmentモードのような状態になっていると思われる。


解決方法としては「--exclude」から「template」を削除することで回避できた。
warに含めない予定であれば、templateって名前のディレクトリは作らないほうがよさそうです(バグなんじゃないのか。。。。と思わざるをえない)。