LoginSignup
2
2

More than 3 years have passed since last update.

Herokuにデプロイしたアプリの更新で「Application error」

Last updated at Posted at 2021-04-23

概要

既にHerokuへデプロイしたアプリケーションで修正を行い、更新された内容をHerokuに反映したところ、アプリケーションが実行できないという事象が発生しました。

アプリケーションはspring-boot用いて作成し、mavenでビルドをしています。

image.png

上のような画面が表示され、「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」をクリック。

スクリーンショット 2021-04-23 11.58.25.png

②Maven ビルド(mvn package)

jarファイルを生成します。

プロジェクトを右クリック>「実行」>「8 maven ビルド」をクリック。

スクリーンショット 2021-04-23 12.04.50.png

③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」です。

参考

デプロイが完了したところでアプリを開いてみます。

スクリーンショット 2021-04-23 12.22.25.png

うまくいきました!!

最後に

更新される方だけでなく、初めてデプロイされる方の参考にもなれば幸いです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2