※Scala/Play歴は数日なので色々間違ってると思います。気づいた点があったら教えてください
作ったファイル
https://github.com/saito400/play-scala-demo
参考にしたページ
環境
アプリ | バージョン |
---|---|
Mac OSX | Yosemite |
Typesafe Activator | 1.2.12 |
Play | 2.3.7 |
Slick | 2.1.0 |
準備
Herokuのアカウント作成
以下からサインアップする。
Heroku Toolbeltのインストール
以下からダウンロードしインストールする。
Typesafe Activator をダウンロード
以下からダウンロードする。
パスを通す
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
上記にアクセスし成功してれば「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を修正
色々修正しているので以下を参照ください。
基本的には以下のソースを修正すれば良いと思います。
/app/controllers/以下
/app/views/以下
/conf/routes
ローカルで動作確認
以下のコマンドを実行するとサーバが起動する。
$ activator run
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でログを確認する