読者です 読者をやめる 読者になる 読者になる

play2.0でアプリをherokuにデプロイするまでの道のり

scala heroku play framework

f:id:yosuke_furukawa:20120325204341p:image

先日、四則演算で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
とかも解けるね( ̄ー ̄ )