概要
既にHerokuへデプロイしたアプリケーションで修正を行い、更新された内容をHerokuに反映したところ、アプリケーションが実行できないという事象が発生しました。
アプリケーションはspring-boot用いて作成し、mavenでビルドをしています。
上のような画面が表示され、「heroku logs --tail」をターミナルで打つと下記のログが出ていました。
どうやらアプリ実行用のjarファイルにアクセスできないことによりエラーが起きているようです。
2021-04-21T03:49:43.595393+00:00 app[web.1]: Error: Unable to access jarfile target/Snitch-0.0.1-SNAPSHOT.jar
2021-04-21T03:49:43.654208+00:00 heroku[web.1]: Process exited with status 1
2021-04-21T03:49:43.862559+00:00 heroku[web.1]: State changed from starting to crashed
2021-04-21T03:49:46.024338+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=snitch1.herokuapp.com
環境
OS: macOS Big Sur 11.2.3
JDK:14.0.1
Spring Boot 2.3.3
maven
eclipse
結論(原因)
jarファイルがコミット対象に含まれていなかった。
Heroku上でアプリケーションを実行する場合は、下記の内容が書いてある「Procfile」というHeroku上で実行するコマンドを定義したファイルをルートディレクトリに置く必要があります。
web: java -Dserver.port=$PORT -jar target/Snitch-0.0.1-SNAPSHOT.jar
ファイルの内容を見ていただければわかるのですが、「target」というディレクトリの配下にあるjarファイルを実行するということが書かれており、Heroku上にこのjarファイルがないとアプリは当然実行できません。
この事象にハマった時、筆者はHeroku上にjarファイルはあるに決まっていると思い込んでいました。
対処法
では、Eclipseとターミナルを使って改めてデプロイをしていきます。
括弧内はターミナルなどでコマンドによる操作を行う方のために書いているものです。
①Maven clean(mvn clean)
targetディレクトリを削除します。
プロジェクトを右クリック>「実行」>「4 maven clean」をクリック。
②Maven ビルド(mvn package)
jarファイルを生成します。
プロジェクトを右クリック>「実行」>「8 maven ビルド」をクリック。
③jarファイルを「git add」
生成したjarファイルを「git add」します。
ターミナルでコマンドを実行してみると、なんと「.gitignore」ファイル上でコミット対象に含めないようになっていました。
これにより、
Heroku上でjarファイルは存在しないことによるアプリの実行エラーが発生していたことがわかりました。
$ git add target/Snitch-0.0.1-SNAPSHOT.jar
The following paths are ignored by one of your .gitignore files:
target/Snitch-0.0.1-SNAPSHOT.jar
Use -f if you really want to add them.
$ git add -f target/Snitch-0.0.1-SNAPSHOT.jar
「git add -f」で強制的にjarファイルをコミット対象に追加しました。
「git status」でjarファイルがコミット対象に含まれていることを確認し、コミットします。
$ git status
On branch Heroku
Your branch is up to date with 'origin/Heroku'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: target/Snitch-0.0.1-SNAPSHOT.jar
$ git commit -a -m "add target/Snitch-0.0.1-SNAPSHOT.jar"
[Heroku f752287] add target/Snitch-0.0.1-SNAPSHOT.jar
1 file changed, 236363 insertions(+)
create mode 100755 target/Snitch-0.0.1-SNAPSHOT.jar
④Herokuにデプロイ
Herokuにデプロイします。
$ git push heroku Heroku:main
※補足
筆者の環境では、デフォルトブランチ名は「master」ではなく**「main」で、
メインブランチではなく「Heroku」**というブランチからpushしているので上記のコマンドになりました。
デフォルトブランチ名と作業ブランチが「master」であれば「git push heroku master」です。
参考
デプロイが完了したところでアプリを開いてみます。
うまくいきました!!
最後に
更新される方だけでなく、初めてデプロイされる方の参考にもなれば幸いです。