きっかけ
自分で作成した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] [^1]: この日本語が技術的に正しいかどうかあまり自信がありません。どなたかProcfileとデプロイ資産の関係について詳しい方、もし誤りがあればご指摘いただけると幸いです。対応
以下を参考に、①Procfileを作成し、②pom.xmlのpluginにwebapp-runnerを追記する。 Deploying Tomcat-based Java Web Applications with Webapp Runner | Heroku Dev Center https://devcenter.heroku.com/articles/java-webapp-runner#deploy-your-application-to-heroku結果
![apperror.png](https://qiita-image-store.s3.amazonaws.com/0/322008/7147b541-4dc2-9820-d0fb-7ef3eddaf975.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.
この原因が最初わからなくてめちゃくちゃ焦った1のだが、たいていそういう場合は往々にして原因はしょぼいのである。
原因
pom.xmlのpackagingが未記載であったため。対応
pom.xmlのpackagingに"war"を指定する。結果
デプロイ成功!まとめ
Herokuを初めて利用する際は以下に注意すればいいと思う。 ①Buildpackの設定が必要。 ②Javaの場合レポジトリ直下にpom.xmlを配置する必要がある。 ③Procfileが必要。pom.xmlのに"war"を指定し忘れた件は私があほでした。すみません。1