Edited at

ScalaでPlayのプロジェクト作ってHerokuで動かす

More than 3 years have passed since last update.

※Scala/Play歴は数日なので色々間違ってると思います。気づいた点があったら教えてください

作ったファイル

https://github.com/saito400/play-scala-demo


参考にしたページ

https://www.playframework.com/documentation/ja/2.3.x/Home

http://slick.typesafe.com/doc/2.1.0/gettingstarted.html#adding-slick-to-your-project

http://codezine.jp/article/detail/7816

http://qiita.com/kukita/items/6326f1439abec013a479#3-13

http://tototoshi.hatenablog.com/entry/2014/10/09/205728

https://github.com/slick/slick-codegen-example

https://github.com/playframework/play-slick/tree/master/samples

http://www.atmarkit.co.jp/ait/articles/1401/22/news019_3.html

https://www.playframework.com/documentation/ja/2.3.x/ProductionHeroku

http://slick.typesafe.com/doc/2.1.0/code-generation.html

http://qiita.com/tsumekoara/items/f17b8f9b9cc7a1e59ab4?utm_content=buffercdbd7&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer#procfile

https://github.com/bizreach/play2-hands-on


環境

アプリ
バージョン

Mac OSX
Yosemite

Typesafe Activator
1.2.12

Play
2.3.7

Slick
2.1.0


準備


Herokuのアカウント作成

以下からサインアップする。

https://www.heroku.com/


Heroku Toolbeltのインストール

以下からダウンロードしインストールする。

https://toolbelt.heroku.com/


Typesafe Activator をダウンロード

以下からダウンロードする。

http://typesafe.com/community/core-tools/activator-and-sbt

パスを通す

export PATH=$PATH:/relativePath/to/activator


実装


playのプロジェクトを作成

$ activator new play-scala-demo play-scala

$ cd play-scala-demo

activatorを起動


$ activator

eclipseを使う場合はeclipseプロジェクトとして取り込めるよう変換

[play-scala-demo] $ eclipse

IDEAを使う場合

※以下は不要か?

```

[play-scala-demo] $ idea


起動できるかテスト

[play-scala-demo] $ start

```

http://localhost:9000/

上記にアクセスし成功してれば「Your new application is ready.」と表示される


必要なライブラリの読み込み

build.sbtを修正し、必要なライブラリを追加する。

今回作成したbuild.sbtの内容は以下

name := """play-scala-demo"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayScala)

scalaVersion := "2.11.1"

libraryDependencies ++= Seq(
jdbc,
cache,
ws,
"com.typesafe.slick" %% "slick" % "2.1.0",
"com.typesafe.slick" %% "slick-codegen" % "2.1.0",
"com.typesafe.play" %% "play-slick" % "0.8.0",
"org.slf4j" % "slf4j-nop" % "1.6.4",
"org.postgresql" % "postgresql" % "9.3-1102-jdbc41"
)

※anormは削除した。

build.sbt修正後以下のコマンドでライブラリをロードする

$ activator update 

eclipseを使う場合はeclipseプロジェクトとして取り込めるよう変換

$ activator eclipse


ローカルmacにpostgresqlをインストール&テーブル作成

$ brew install postgresql

$ postgres -D /usr/local/var/postgres &

$ psql postgres;

postgres=# CREATE DATABASE playdb;

postgres=# ¥q


application.conf設定

conf/application.confに以下を追加


db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/playdb"

slick.default="models.*"


Slick用のコードを自動生成

Slick用のコードをテーブルからGenerateする為、以下のファイルを作って実行する

※今回はapp/models以下に出力されるよう設定した


package tools

import scala.slick.codegen.SourceCodeGenerator

object Generator {

def main(args: Array[String]): Unit = {

println("start")

val slickDriver = "scala.slick.driver.PostgresDriver"
val jdbcDriver = "org.postgresql.Driver"
val url = "jdbc:postgresql://localhost/playdb"
val outputFolder = "app/"
val pkg = "models"

SourceCodeGenerator.main(
Array(
slickDriver,
jdbcDriver,
url,
outputFolder,
pkg))

println("end")

}
}

conf/application.confに以下の記述を追加する

db.default.driver=org.postgresql.Driver

db.default.url="jdbc:postgresql://localhost/playdb"
slick.default="models.*"
applyEvolutions.default=true

Procfileを作成し、以下の内容を記載。

※play-scala-demoをアプリケーション名に変更する

web: target/universal/stage/bin/play-scala-demo -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}

Evolutions(Railsのマイグレーションみたいなもの?)用のファイルを作成。

-DapplyEvolutions.default=true に設定してこのファイルを作成するとactivator start時に自動でSQLを実行してテーブルを作成してくれる。

conf/evolutions/default/1.sql

CREATE TABLE feeds (

id serial,
name varchar(100),
url varchar(500)

);


コントローラとviewを修正

色々修正しているので以下を参照ください。

https://github.com/saito400/play-scala-demo

基本的には以下のソースを修正すれば良いと思います。

/app/controllers/以下

/app/views/以下

/conf/routes


ローカルで動作確認

以下のコマンドを実行するとサーバが起動する。

$ activator run

http://localhost:9000/にアクセスし問題ないことを確認


Heroku側のDB設定

$ heroku addons:add heroku-postgresql --app app_name

確認

$ heroku addons

$ heroku config


Herokuにデプロイ

$ git init 

$ git remote add origin YOUR_REPOSITORY

$ git add . -A && git commit -m "initial"

$ git push --set-upstream origin master

$ heroku login

$ heroku create

$ git push heroku master

$ heroku open

ブラウザが立ち上がるので、正常に動作してるか確認。

エラーが出てたら$ heroku logsでログを確認する