heroku のドキュメントを見ると、Scala 版は Play を使っていないし、Java 版だと Play用の記事はあるもののバージョンが古いので、
play new
のときに Scala を選択して後は指示通りって感じだと、やっぱりちゃんと動かない。Play のサイト(日本語版)の方では、scala 用のドキュメントがあるけど、Play 2.2.x じゃなく Play 2.1.5 なので、このままだと動かない。英語版では、一応、2.2.x 用に修正されているようだけど、PostgreSQLとの連携とか後でもいいから heroku との連携だけ確認したいってニーズにはやや冗長。
つうわけで、手短に heroku 上で Play(scala) の HelloWorld を動かしてみる手順をまとめてみた。
============================
■ まず Play プロジェクトを作る。
$ play new helloworld _ _ __ | | __ _ _ _ | '_ \| |/ _' | || | | __/|_|\____|\__ / |_| |__/ play 2.2.2 built with Scala 2.10.3 (running Java 1.7.0_51), http://www.playframework.com The new application will be created in /home/xad/devel/workspace/scala/play1/helloworld What is the application name? [helloworld] > Which template do you want to use for this new application? 1 - Create a simple Scala application 2 - Create a simple Java application > 1 OK, application helloworld is created. Have fun!プロジェクトが生成されるので、以降、helloworld フォルダの中で作業する。フォルダの中身は以下のような感じ。
$ cd helloworld/ $ tree . ├── README ├── app │ ├── controllers │ │ └── Application.scala │ └── views │ ├── index.scala.html │ └── main.scala.html ├── build.sbt ├── conf │ ├── application.conf │ └── routes ├── project │ ├── build.properties │ └── plugins.sbt ├── public │ ├── images │ │ └── favicon.png │ ├── javascripts │ │ └── jquery-1.9.0.min.js │ └── stylesheets │ └── main.css └── test ├── ApplicationSpec.scala └── IntegrationSpec.scala 10 directories, 14 files
■ ソースを編集する
疎通確認としては必須ではないけど、一応 Hello Worldってことで、文言だけ変えておく。
package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def index = Action { Ok(views.html.index("Hello, world!")) } }
■ Procfile を書く。
heroku 上で実行されるコマンドを記述するやつで、プロジェクトのルート直下に置いとくファイルだけど、これが Play のバージョンごとに違っていて、知らないとちょっと苦労する。2.2.x では、以下のような感じ。
web: target/universal/stage/bin/helloworld -Dhttp.port=${PORT}"web:" の後が、"play run" だとか "target/start "になってると、古い方式なので、ちゃんと起動しない。あと、port の指定の後に、$JAVA_OPTS とか $PLAY_OPTSとか指定しているチュートリアルもあるけど、これも今のプロダクトだと動かなくなる。
■ git に入れる
$ git init $ git add . $ git commit -m "init"
■ heroku アプリを作る
$ heroku createここで、ブラウザから heroku にログインすると、Apps ページに今作ったアプリケーションが表示されているのが確認できる。
■ デプロイする
$ git push heroku master
■ 確認する
$ heroku ps === web (1X): `target/universal/stage/bin/helloworld -Dhttp.port=${PORT}` web.1: up 2014/04/21 16:24:01 (~ 18s ago)何か失敗してたら、up じゃなくて crashed とかになってる。
以下のコマンドで、ブラウザ上、Hello, world!って表示されるのを確認できる。
$ heroku open
ログを見るには、
heroku logs
。Procfile が間違ってると、例えば、"web: play run"とか古い Playの設定の仕方だと、"bash: play: command not found"みたいな感じで、ログに吐かれている。
あと $JAVA_OPTS とか余計な指定が入ってると、"Bad application path: -Xmx384m"って書き出される。依存ライブラリの問題なんかもログに出力される。