Heroku上でPlay(Scala)+MySQL

Heroku上でPlay(Scala)+MySQLを動かしたときのメモ。
使ったのは、Play2.1です。

PlayのドキュメントにHerokuへのデプロイ手順が書いてあります。その通りやれば特にはまらずできました。
http://www.playframework-ja.org/documentation/2.0.4/ProductionHeroku

MySQLを使うときにやったことをメモしておきます。

Herokuの設定

まずは、HerokuにMySQLを用意。

$ heroku addons:add cleardb:ignite

環境変数CLEARDB_DATABASE_URLの値からデータベースURLを確認。

$ heroku config | grep CLEARDB_DATABASE_URL
mysql://user:password@us-cdbr-east-03.cleardb.com/database?reconnect=true

データベースURLをDATABASE_URLに設定する。
このとき、characterEncoding=utf8を追加する。
じゃないと、INSERTした文字が文字化けしちゃう。

$ heroku config:set DATABASE_URL='mysql://user:password@us-cdbr-east-03.cleardb.com/database?reconnect=true&characterEncoding=utf8'

Playの設定

Play側。
まず、Build.scalaを編集。下のような感じでMySQLJDBCドライバを追加。

val appDependencies = Seq(                   
  ・・・
  "mysql" % "mysql-connector-java" % "5.1.18"
)

次にapplication.confを編集。
${?DATABASE_URL}というように、環境変数名の最初に"?"を付けて書いておくと、その環境変数が設定されているときだけ上書きできる。
下のようにしておけば、ローカル環境と本番環境とで設定ファイルをいじらずにデータベースURLを変えれますね。

db.default.driver="com.mysql.jdbc.Driver"
db.default.url="mysql://user:password@localhost/local_db"
db.default.url=${?DATABASE_URL}


これで、Herokuの環境変数を使ってデータベースに接続する準備ができました。
あとは、Playのドキュメントにしたがってデプロイ!

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

Scala逆引きレシピ (PROGRAMMER’S RECiPE)