経緯
Play Frameworkで作成したWebアプリを作成しました。
せっかく作成したのでHerokuにデプロイしてみようとしたのですが
エラーでデプロイができませんでした。
ログを見ると"App crashed"と書かれており
ログだけでは何が原因なのかがちょっとわからなかったです。
ちなみに言語はJavaです。
対応
ログに書かれている"App crashed"を頼りに
調べてみて下記のこと実施してみました。
1.不要なファイルの削除
ローカルではSQLiteを利用していたため
データベースのファイル(拡張子が「.sqlite3」の奴)や
クエリが記載されたファイルがありました。
HerokuではPostgreSQLを利用するため、いらないので削除しました。
2.PostgreSQLのJDBCドライバの追加
DBはPostgreSQLを利用するので
JDBCドライバ(拡張子が「jar」のファイル)を追加しました。
3.build.sbtの修正
「name:=」のところがアプリ名になっていなかったので
アプリ名になるよう修正。
また、PostgreSQLのドライバーライブラリを記載しました。
name:=""""アプリケーション名"""
・
・
・
libraryDependencies+="org.postgresql"%"postgresql"%"jarファイルのバージョン"
4.Procfileの追加
Procfileがなかったので追加しました。
記載内容は以下になります。
※${DATABASE_URL}は後で説明。
${APPLICATION_SECRET}はシークレットキーの環境変数
web: target/universal/stage/bin/アプリケーション名 -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}
-Dplay.cypto.secret=${APPLICATION_SECRET}
5.application.confの修正
PostgreSQLを利用するため、driver,url,user,passwordを追加。
シークレットキーを設定しないと怒られたので、それも設定。
また、現状だとアクセスが許可されているのはローカルのみなので
一旦は全許可とするように設定。
※url,user,passwordの環境変数について
HerokuではDBの情報を環境変数に設定します。
デフォルトで環境変数「DATABASE_・・」にDBの情報を保持する。
db.default.driver=org.postgresql.Driver
db.default.url=${?DATABASE_URL}
db.default.user=${?DATABASE_USER}
db.default.password=${?DATABASE_PASSWORD}
play.http.secret.key="生成したシークレットキー"
play.filters.hosts.allowd+="."
感想
上記のことを行い無事デプロイできました。
デプロイで詰まってから解決するまで2~3週間ほど時間が
かかってしまい大変でした。
Ruby on Railsは簡単でしたので大丈夫かなーと思っていましたが
全然大丈夫ではありませんでした。
シークレットキーをapplication.confとProcfileに記載したりと
ところどころあってるのかなーと思うところはありますが
とりあえずデプロイできてよかったです。
あと、説明が間違ってたらごめんなさい。