きっかけ
自分で作成した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.」と表示された。
原因
Buildpackの設定がなされていないため。
対応
「Settings」タブのページ下方から「Add buildpack」を押下し、「heroku/java」を選択し追加する。
結果
もう一度「Deploy Branch」ボタンを押下すると、以下のように依然ビルドエラーとなった。
②「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」ボタンを押下すると、以下のようにビルド成功となった。やったね!
...と思ったのも束の間、
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
結果
依然として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