scalate.workdirはちゃんと設定しよう

あれWebサーバがレスポンス返してくれない

以下のエラーがscalatra + scalateを使っているCentOS環境で発生。

14:38:28.244 [qtp850442967-20] INFO  o.f.s.servlet.ServletTemplateEngine - Scalate template engine using working directory: /tmp/scalate-4442895908462680128-workdir
2014-01-09 14:41:18.406:WARN:oejs.ServletHandler:/
org.fusesource.scalate.TemplateException: assertion failed: Tried to find 'scalate' in '/tmp/scalate-4442895908462680128-workdir/classes' but it is not a directory
        at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:834)
        at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:691)
        at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:411)
        at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:405)
        at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:475)
        at org.scalatra.scalate.ScalateSupport$class.renderScalateErrorPage(ScalateSupport.scala:132)
        at org.scalatra.scalate.ScalateSupport$class.handle(ScalateSupport.scala:123)

確かに該当のディレクトリがない。ローカルで確認してみると、確かにtemplateのコンパイル後のディレクトリを消すと上のエラーがでる。どうやら何かが消してしまったらしい。

原因

tmpwatchが10日更新ないものを消すように設定されているので、消してしまっていた。開発環境では頻繁にdeployされているので、10日も同じディレクトリを使うことはなかったので今まで発生していなかったので対策していなかったというオチ。

対策

java起動時のオプションで以下のように設定できるので設定しておいた

-Dscalate.workdir=/path/to/workdir