【TroubleShooting】AWS EC2デプロイ中、TemplateInputExceptionエラー対応
はじめに
今日は、現役のエンジニアの友達に手伝ってもらい、AWSのデプロイにちゅれんじしました。
素直にいいますと、SSH、puttyなど色々なことが頭に入りすぎて、難しかったです!
OSとネットワークの知識を身に付けなければいけないと考える1日でした。
友達にセッティングを手伝ってもらい、一人はプロジェクトをjarにbuildし、local環境からテストしてみる練習をオススメしてもらい、buildをやってみました。
Buildの方法(gradle)
① build時、プロジェクトフォルダのディレクトリに移動します。
② dirでgradlew.bat
というファイルがあるかをチェックします。
gradlew.bat build
③ buildしたフォルダーのlib
にディレクトリを移動します。
④ .jar
になっているファイルをjavaから実行します。
java -jar projectname.jar
TemplateInputException
buildが無事に終わり、実行してみれば、home.htmlに繋ぐことができませんでした。
ログをchatGPTに翻訳した結果、fragmentに設定したhead.htmlをロードすることができないって書いてありました。この場合、'/'
かapplication.ymlにview resolverのディレクトリをチェックする必要がありました。
check 1 (application.yml)
spring:
thymeleaf:
cache: "false"
prefix: classpath:/templates/
prefix: classpath:/templates/
を追加してみましたが、解決はできませんでした。
check 2 (Controller)
EC2を通してデプロイする場合、Controllerがhtmlをリターンする際に、'/'があれば、エラーが生じることが分かりました。
@Controller
public String home(){
return "home";
// return "/home" (X)
}
しかし、全てのリターンをする際に"/"を書かないことをルールとして決めたので、こちらの方法では解決ができませんでした。
★★check 3 (fragment)★★
エラーログには、fragmentであるhead.htmlを見つからないとう書いてあったので、コードを見た結果、以下のようなコードがありました。
<div th:remove="tag" th:replace="~{/fragments/head :: head} "></div>
fragmentにある'/'を消してみたました。
<div th:remove="tag" th:replace="~{fragments/head :: head} "></div>
/を除去した結果、無事にサーバーからページをリターンすることが分かりました。
ただ、buildをしてテストをすることだけでしたが、とても大変な色々な勉強ができる経験でした。なぜCI/CDが必修になっているyのかが少しは理解ができる経験でした。
Discussion