play2.0でアプリをherokuにデプロイするまでの道のり
先日、四則演算で10を作るプログラムをScalaで書いてみたので、それをwebアプリ(Make10)にしてみました。
今回はPlay 2.0で作ったサイトをherokuにデプロイするまでやった事を簡単に説明していきます。
ちなみに四則演算の問題を前に出していました。
https://twitter.com/yosuke_furukawa/status/181063838932799488:twitter:detail:left
これの答えは以下の通り:
7,8,8,9の答え
4,4,6,6の答え
4,4,6,7の答え
4,5,5,9の答え
5,5,5,7の答え
3,4,7,8の答え
1,1,5,8の答え
さてさて、冒頭の通り、今回Play Framework 2.0でWebアプリ(Make10)にしてみました。
Play Framework 2.0からScala主体になっている上に色々な機能が追加されています。
Play1.0との差異は以下のサイトに書かれています。
API Only - Stack Exchange
Play2.0のアプリをherokuにデプロイするまでやった事を簡単に説明していきます。
まずはwebアプリをローカルで動作するようにします。
$ play new make10
これでひな形アプリが作られます。
これだけだと何でもないアプリなので、変更をしていきます。
まず自分はEclipse派なので、eclipseプロジェクト化を行います。
$ cd make10
$ play
と実行してください。
その後、
[make10] $ eclipsify
と実行するとeclipseプロジェクトにしてくれます。
そこからeclipseへ既存プロジェクトのインポートをすればeclipseプロジェクトとして実行できます。
※このやり方だとviewsに変更を加えても即座に反映はされないようです。Eclipseでエラーになってもブラウザで見るとエラーになっていない事が多いです。この辺りはScala IDE側の問題としてPlay teamは説明しています。
Documentation: IDE — Playframework
Application.scalaに変更を加えていきます。
一応何の変更をしたかを書いておきます。
Applicaiton.scala
package controllers import play.api._ import play.api.mvc._ import core.Make10 import play.api.templates.Html object Application extends Controller { def index = Action {implicit request => taskForm.bindFromRequest.fold( errors => Ok(views.html.index("Please input 4 digit numbers")), label => { val array = label.split(' ').toList.map { _.toInt } if (array.length != 4) { BadRequest(views.html.index("error!! please input 4 digit numbers.")) } else { val list10 = Make10.make10(array) println(array) println(list10) if (list10.size >= 1) { val answerList = list10.map{_._2} Ok(views.html.answers("Please input 4 digit numbers", new Html(answerList.mkString("<li>10 = ","</li><li>10 = ", "</li>")))) } else { Ok(views.html.index("The answer is nothing. " + label)) } } } )} }
変更したらサーバーを走らせてみます。
[make10] $ run
localhostに9000でアクセスすれば結果が得られます。
完成したらherokuにデプロイします。
まず、herokuにデプロイするためにProcfileをプロジェクトのルートフォルダに作ります。
Procfile
web: target/start -Dhttp.port=${PORT} -DapplyEvolutions.default=true
その後、プロジェクトのルートフォルダで以下のコマンドを実行します。
$ git init
$ git add .
$ git commit -m "init"
gitが入っていない場合はインストールしてください。
gitでのコミットが終わったら、以下のherokuコマンドを実行します。
$ heroku create --stack cedar
これでherokuにアプリケーションのプラットフォームができます。
$ git push heroku master
これでherokuにpushされます。
こんな感じでデプロイできます。
デフォルトで作成される名前が気になるようならrenameもできます。
さて、これでwebアプリになったので、どんな問題が出ても解けるね。
9 9999 9999 99999
とかも解けるね( ̄ー ̄ )