つよつよにあこがれるプログラマの日記

子育てとかプログラムとか日々の事をここに残します。ぼちぼちやってます。

PlayFrameworkをherokuにデプロイするときにハマったところ(2015/10/24)

さて、Playで作成したアプリをherokuにデプロイしたのですがだいぶハマりました。
解決する際にやったことを書いていきます。(2015/10/24現在の内容です。)
書いてる事は初心者向けだと思います。自分が初心者なので…

最初に

herokuのエラーがでたら、herokutoolbeltからlogsを確認しましょう。
そのほか、パスが間違ってるときはLinuxコマンドでディレクトリを確認しましょう

<問題解決に使ったコマンド>

  • heroku logs
    →ログを確認する【超重要】

  • heroku config
    →heroku上の環境変数を確認できる

  • heroku open
    →アプリのページを開く

  • heroku run {xxx}
    →{}にLinuxコマンドをかいて動かせる
    (例)heroku run "ls -l target/universal/stage/bin/"

Procfileの編集

まず、僕は以下のテキストで勉強を進めています。
www.amazon.co.jp
これが初心者にもめちゃくちゃわかりやすく、とっても読みやすい
演習も正直に従っていけば素直なPlayアプリが作れるようになると思います。
で、これなんですがherokuへのデプロイ方法が少し古いため、実際はherokuのドキュメントを見ながらProcFileを直す必要があります。

ProcFileはPlayのバージョンごとに3パターンの書き方があるので、公式ドキュメントを見ながら合わせて書きましょう。

ProcFileの書き方:
https://devcenter.heroku.com/articles/play-support

自分がデプロイしようとしてるplayのバージョンがわからなくなった人は(いないと思うけど) projectのplugins.sbtにあるので見てみましょう (play自身がsbtのライブラリであるため、plugins.sbtの中に定義がある)

Playの構成:
https://www.playframework.com/documentation/ja/2.3.x/Anatomy

ProcFileの編集は慎重に

heroku logsで確認したときに、環境変数が置換されずに設定ファイルそのままの文字列でてたら、スペルミスの可能性が高いです。

Bad application path: -Xmx384m

ProcFileからJAVA_OPTの一文を消しましょう。 これが書かれていると「Bad application path: -Xmx384m」とでてエラーになります。 (コンパイラが二つ選ばれちゃう?よくわかんない)
scala版とJava版は自動で判断してくれるので公式ドキュメントにしたがって勇気をもって消しましょう。

で、最終的にできたProcFileの中身がこれ

web: target/universal/stage/bin/xxxx-1234 -Dhttp.port=$PORT -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=$DATABASE_URL

target/universal/stage/bin/xxxx-1234: No such file or directory

めちゃくちゃはまりました。
herokuのアプリ名{xxxx-1234}に合わせても、全然うまくいかない
StackOverFlowとかでもたくさん引っかかります。

で、これが何かというと、playをpushしたタイミングでビルドが走り、 そのときにtarget/universal/stage/bin/xxxx-1234というディレクトリ構成でフォルダ生成するんですが、 そのディレクトリ名は「build.sbt」にあるNameをもとに作ります。
 なので、Nameを修正します。

・build.sbt name := "SampleApps"
→name := "xxxx-1234"

PostGreSQL使用時のUserテーブル

PostGreSQLを使用する場合、Userがテーブル名にあるとPostGreSQLでは予約語になっているため、エラーとなる User→Accountにリネームしよう(Eclipseリファクタリングで) hakobera.hatenablog.com

あとがき

自分は、herokuもplayもわかんないって状態でチャレンジしたので本当にハマりました。
いやーでもデプロイできて感動でいっぱいだー 最高の気分だーーー!!

しかし…
子供達が完全に寝てからちょこちょこ調べながらデプロイ作業を行っていたけど辛すぎる!!
一歩進んで二歩下がる的な感覚に陥ってフラストレーションがたまる!
やっぱりこういうのって時間とってやるのがいいのねー…