PlayでScalaとScalateを使いたいときの初っぱなメモ

Play FrameworkでScala + Scalateを使う場合、
Scalate用にいろいろと準備が必要なみたいです。


基本的には
"Play framework - scalate"
http://www.playframework.org/modules/scalate-0.7.2/home
の通りなんですがどうにも言葉足らずのような。。


まず必要なモジュールをインストール

% sudo play install scala
% sudo play install scalate

scalateは最新(2010/11/08)だと0.8がインストールされます。

その後プロジェクト作成ですが上記ページの通り

play new "好きなプロジェクト名" --with scala,scalate

すると作成されますが、
このままではindex.sspが読み込まれず
play runしてもindex.htmlが無いとエラーが出てしまいます。


そこで上記ページや
"Play framework の Tutorial を Scala と Scalate で行う(Step1, Step2) - cooldaemonの備忘録"
http://d.hatena.ne.jp/cooldaemon/20100905/1283680173#20100905fn1
を参考にさせていただくと
app以下のcontrollers.scalaを

object Application extends Controller { 

から

object Application extends ScalateController { 

に変更するとありましたので修正します。


が、これだけだと当然動きません。
Applicationオブジェクトの中でindexを

def index = Template

しているからです。


"Play framework - scalate"では

def index(name: String = "Guest user") = render(name)

と修正していますが、
とりあえずは画面に値を渡さずに

def index = render()

としてやると動くようになります。
これはちゃんとチュートリアル
"Play framework - Starting up the project (Scala version)"
http://www.playframework.org/documentation/1.1/scguide1
「Running the application」に書いてありましたね。


まとめると新規プロジェクトの場合

  1. extendsするのをScalateControllerに修正
  2. Templateではなくrender()を呼ぶ

の2点を修正してやればよいようです。