LoginSignup
23
22

More than 5 years have passed since last update.

Heroku初心者がJavaで作成したWebアプリをGitHub連携でデプロイする時つまずいた4つのこと

Posted at

きっかけ

自分で作成したWebアプリケーションをGitHubに置いていたが、
「やっぱり動く状態で公開したいよね!」
という気持ちが芽生えたのがきっかけ。

いろいろググって
「どうやらHerokuというものでいけそうだ」
ということがわかったので、勉強がてらデプロイしようと思った。

ソース:
https://github.com/ShandyGaffLover/sample001

前提

・Heroku初めて
・Java,Git,Mavenは経験者
・GitHubアカウント作成済み

やったこと

Herokuアカウント作成⇒GitHub連携
まではググりながら割とすんなりできた。

参考にした記事は以下:
無料でWebアプリケーションを公開できるHerokuをやってみた - Qiita
https://qiita.com/fkooo/items/0365b50d4534a236dcb2

Heroku使い方メモ(Java) - Qiita
https://qiita.com/opengl-8080/items/9dc9243c4e68cd0674f8

つまずいたこと

①「アプリの言語がわからない」と言われてビルドされない

現象

連携するリポジトリとデプロイするブランチを選択後、「Deploy Branch」ボタンを押下すると、「No default language could be detected for this app.」と表示された。

builderror.png

原因

Buildpackの設定がなされていないため。

対応

「Settings」タブのページ下方から「Add buildpack」を押下し、「heroku/java」を選択し追加する。

結果

もう一度「Deploy Branch」ボタンを押下すると、以下のように依然ビルドエラーとなった。

wherepomis.png

②「pom.xmlが見つからない」と言われてビルドされない

現象

①の対応後、再び「Deploy Branch」ボタンを押下すると、「Could not find a pom.xml file! Please check that it exists and is committed to Git.」と表示された。

原因

レポジトリ直下にpom.xmlが存在しないため。

自分は最初trainingレポジトリの下にsample001プロジェクトを作成していたので、pom.xmlはtraining/sample001/pom.xmlという位置にあった。
どうやらこの位置だとHerokuにデプロイできないようだ。

※類例があった。
Heroku:Buildpackエラーでハマった - Qiita
https://qiita.com/arekore0/items/eae550bdbcc78eeac082

対応

新規レポジトリsample001を作成し、その直下にpom.xmlを配置しソースを移動した。

結果

もう一度「Deploy Branch」ボタンを押下すると、以下のようにビルド成功となった。やったね!

buildsuccess.png

...と思ったのも束の間、

apperror.png

URLにアクセスするとApplication Errorが表示されている...。

③デプロイ後、Webプロセスが実行されていない

現象

デプロイに成功後、「View」ボタンを押下してアプリケーションURLにアクセスすると、ApplicationErrorを通知する画面が表示される。
ログを参照すると以下のように表示される。

2018-12-06T07:09:36.166348+00:00 heroku[router]: at=error code=H14 desc="No web processes running" 

原因

Procfileが作成されていない状態で、Webアプリケーションが実行されていないため。1

対応


以下を参考に、①Procfileを作成し、②pom.xmlのpluginにwebapp-runnerを追記する。
Deploying Tomcat-based Java Web Applications with Webapp Runner | Heroku Dev Center

結果

apperror.png

依然としてApplication Errorが表示されている。ええ...なんで...。

④「warファイルが存在しない」とログに表示される

現象

③の対応後、デプロイに成功し「View」ボタンを押下してアプリケーションURLにアクセスすると、ApplicationErrorを通知する画面が表示される。
ログを参照すると以下のように表示される。

2018-12-06T10:51:25.163976+00:00 app[web.1]: The specified path "target/*.war" does not exist.

この原因が最初わからなくてめちゃくちゃ焦った2のだが、たいていそういう場合は往々にして原因はしょぼいのである。

原因

pom.xmlのpackagingが未記載であったため。

対応

pom.xmlのpackagingに"war"を指定する。

結果

デプロイ成功!

まとめ

Herokuを初めて利用する際は以下に注意すればいいと思う。
①Buildpackの設定が必要。
②Javaの場合レポジトリ直下にpom.xmlを配置する必要がある。
③Procfileが必要。

pom.xmlのに"war"を指定し忘れた件は私があほでした。すみません。2


  1. この日本語が技術的に正しいかどうかあまり自信がありません。どなたかProcfileとデプロイ資産の関係について詳しい方、もし誤りがあればご指摘いただけると幸いです。 

  2. ローカルのTomcatだと動作したのはなぜなのだろう。 

23
22
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
23
22