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