🐈

【TroubleShooting】AWS EC2デプロイ中、TemplateInputExceptionエラー対応

2024/02/24に公開

はじめに

今日は、現役のエンジニアの友達に手伝ってもらい、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