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

the industrial

都内で働くITエンジニアの日記

PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ

前にやった事あったけど忘れてしまっているのと、そのときちゃんとしたメモも取っていなかったので、改めて。

アプリについて

Strutsはもう時代遅れなのかなと感じ始め、じゃあ今Javaで作るWebアプリって何が良いのかな?と調べた結果、良いか悪いかは別として、Scalaでも作れるPlayframworkに興味を持ち。

それからは勉強がてら、最低限CRUD機能+親テーブルと子テーブルのを兼ね備えていることを前提としてPlayframworkを勉強。
出来上がったアプリは、上記に併せてページング機能もあり、地味にめんどくさいロジックを組んでいるので、そこだけ我ながらの力作。
CSSはTwitterBoostrupを利用。とはいえ、今回は機能周りの勉強だったので、デザインは適当なんだけど。

今回はこのJava版のアプリをHerokuにデプロイするメモ。
DBについては、ローカルでは普段MySQLを使っているので、Heroku上ではClearDB(MySQLに似ているSaaSのDB)を使う。

実は、今はScalaでも同じものを作っていたりする。


HerokuのToolbelt

下記からHeroku Toolbeltをインストールしておく。

本当はHomebrewでインストールしたかったんだけど、上手く動かないので中止。


Herokuにログイン

さて、取りあえずディレクトリに移動。アプリ名は「crud_java」。
(ちなみに作り途中のScala版は「crud_scala」だったりして)

$ pwd
crud_java/

下記のHerokuコマンドでログイン。

$ heroku login
Enter your Heroku credentials.
Email: メールアドレス
Password (typing will be hidden):
Authentication successful.


Herokuのアプリケーション作成

下記コマンドでアプリケーションを作成する。

$ heroku create
Creating glacial-scrubland-3010... done, stack is cedar
http://glacial-scrubland-3010.herokuapp.com/ | git@heroku.com:glacial-scrubland-3010.git

Herokuにログインすると、今作成したアプリが見れる。



Herokuのアプリケーションをリネーム


「アプリを選択 > Settings > Name」で名前を変更。
(「glacial-scrubland-3010」→「playframwork-crud-java」と変更)


ローカルのgit設定も変更。

$ heroku rename playframwork-crud-java
Renaming playframwork-crud-java to playframwork-crud-java... done
http://playframwork-crud-java.herokuapp.com/ | git@heroku.com:playframwork-crud-java.git
Git remote heroku updated

一応両方やってみたけど、ローカルからの変更だけで良いっぽい?


ClearDBをインストール

下記コマンドでインストール。らくちん。

$ heroku addons:add cleardb
Adding cleardb on playframwork-crud-java... done, v3 (free)
Use `heroku addons:docs cleardb` to view documentation.

こんな感じ。



ClearDBのエンドポイントを確認

下記コマンドでエンドポイントを確認。
※{パスワード}の所はマスキング

$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL: mysql://b1ecc59f0e6fb8:{パスワード}@us-cdbr-east-05.cleardb.net/heroku_c6bbbbd45a76b45?reconnect=true

ついでに、これらの情報を元にSequel Proとかでログインし、DatabaseやTableを作成しておく。


PlayのConfigを設定


conf/application.confのDB設定の所を、上記「ClearDBのエンドポイントを確認」で確認した内容を

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://us-cdbr-east-05.cleardb.net:3306/heroku_c6bbbbd45a76b45?characterEncoding=UTF8"
db.default.user=b1ecc59f0e6fb8
db.default.password="{パスワード}"

db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5

下の3行は、ClearDBの無料版を利用する際に必要な設定。
参考
一言多いプログラマーの独り言 ー Herokuで、Java Play framework 2.0 + cleardb を利用すると c.j.b.h.AbstractConnectionHook のエラー



Procfile作成


プロジェクトのルートディレクトリに、Herokuで使う為の「Procfile」と言う物を作成。

【Procfile】
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyEvolutions.default=true


Herokuへデプロイ

下記コマンドでデプロイを実行。

$ git push heroku master



アプリケーション稼働

下記コマンドを実行すると、ブラウザが起動して勝手にアプリケーションを開いてくれる。

$ heroku open



前はこれで出来たんだけど、変なエラーが...。

$ heroku logs
2014-02-02T06:40:24.702110+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=playframwork-crud-java.herokuapp.com request_id=27b4f1e1-e61d-4c3a-b3b2-15a0dfcacda3 fwd="122.17.154.11" dyno= connect= service= status=503 bytes=

ログを見ても的を射ない。

今日は諦めて、ディアブロしよーっとww