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"って書き出される。依存ライブラリの問題なんかもログに出力される。