Rubellum fly light

ほぼPHP日記

Play framework with Scalaのデモでハマった

ふとScalaでWebアプリケーション作りたいなーと思ったので、Play frameworkをいじってみることに。
チュートリアルを参考にしてたのですが、いろいろハマったのでメモ。
とりあえず初期のプロジェクトが動作するところまでです。
(あと正直よくわからないことが多いので、とりあえずぼくはこれで動いたよってスタンスです)

環境

OS Arch Linux
Scala 2.9.1-1 (pacmanで確認)
Play framework 1.2.4-9 (yaourtで確認)
Scalaモジュール 0.9.1

インストール

$ sudo pacman -S scala
$ sudo yaourt install -S playframework
$ sudo play install scala-0.9.1  # 「~ install scala」だけだと上手く動かなかった

「$ play install scala」だと、(現状では)バージョンが「0.9.0」のモジュールがインストールされるみたい。
これだと上手く動かないので「0.9.1」を指定してインストールする。

プロジェクト作成

$ play new hello --with scala-0.9.1  # helloはアプリケーション名
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.4, http://www.playframework.org
~
~ The new application will be created in /home/lib2/www/hello
~ What is the application name? [hello] 
~
~ Resolving dependencies using /home/lib2/www/hello/conf/dependencies.yml,
~
~ 	play->scala 0.9.1 (from playLocalModules)
~
~ Some dependencies have been evicted,
~
~	play 1.2.2 is overriden by play 1.2.4
~
~ Installing resolved dependencies,
~
~ 	modules/scala-0.9.1 -> /usr/share/playframework-1.2.4/modules/scala-0.9.1
~
~ Done!
~
~ OK, the application is created.
~ Start it with : play run hello
~ Have fun!
~

なんか1.2.2のフレームワークがほしいけど1.2.4がインストールされてるからそれ使うねって言われてるような気がするが、結果動いたのでよしとする(ぇ

プロジェクト起動

$ cd hello
$ play run

ポート9000番で起動します。
初回のアクセス時にはコンパイルなどが行われるので、起動がちょっと遅いです。
あと、自動で作成されたプロジェクトには間違いがあるので、Template execution error
が出ると思います。
起動自体はできているので、実際にアクセスしてみると綺麗にエラー箇所を表示してくれます。


f:id:rubellum:20120310175419p:image:w640


エラーメッセージ(上のやつから要約したもの)。

Template execution error
Execution error occured in template /app/views/main.scala.html: No route found

In /app/views/main.scala.html (around line 9)


どうやらテンプレートファイル(app/views/main.scala.html)に記述されているjqueryのバージョンが、実際に存在するものとで違っているようです。
(追記:もしかして Playの1.2.2 or 1.2.4, scalaモジュールの0.9.0 or 0.9.1 の整合性がおかしくなってる…?)


調べてみると、1.6.4が用意されています(バグ?)。

$ ls public/javascripts
jquery-1.6.4.min.js


そのため、テンプレート(app/views/main.scala.html)のソースコードを「1.6.4」に書き換えます。

@@ -6,7 +6,7 @@
-        <script src="@asset("public/javascripts/jquery-1.5.2.min.js")" type="text/javascript"></script>
+        <script src="@asset("public/javascripts/jquery-1.6.4.min.js")" type="text/javascript"></script>


再度アクセスしなおすと、うまく表示できると思います。

f:id:rubellum:20120310175418p:image:w640

感想

htmlの参照するjsファイルがないのをエラーで表示できるのすごい。
以前Liftをいじったときより(デモの時点では)簡単だなーという印象を受けた。
まだ初期のデモプロジェクトしかいじってないので、とりあえず矢部がんばる。

あとScala書くときってエディタ何がいいんだろか。
いまemacsなんだけど。