2017-12-04 1 views
0

Ich habe erfolgreich meine Spring-App auf Heroku eingesetzt, aber wenn ich versuche, meine App in Aktion zu testen, erhalte ich Error resolving template "/fragments/head.html", template might not exist or might not be accessible by any of the configured Template Resolvers (home:4) Fehler. Es ist seltsam, denn lokal funktioniert meine App ohne Probleme.Heroku sieht meine Fragmente nicht

Home.html Code:

<!DOCTYPE html> 
    <html xmlns:th="http://www.thymeleaf.org"> 
    <head> 
     <div th:replace="/fragments/head.html"></div> 
     <title>Personal blog - Home</title> 
    </head> 
    <body> 
     <div class="container"> 
      <div th:replace="/fragments/header" th:class="row"> </div> 

      <div class="container"> 
       <div class="container border w-100 post" th:each="post : ${posts}"> 
        <div class="container"> 
         <h1 class="display-5"> 
          <a th:href="@{/post/} + ${post.id}" th:text="${post.title}"></a> 
         </h1> 
         <small class="text-muted" th:text="${post.creationDate}"></small> 
        </div> 
        <div class="container"> 
         <p class="lead text-justify" th:text="${post.contents}"></p> 
        </div> 
       </div> 
       <nav> 
        <ul class="pagination justify-content-center" th:if="${lastPageIndex} gt 1"> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage gt 1}" 
           th:href="@{/home/} + ${currentPage-1}">Previous</a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" th:if="${currentPage-3} ge 1" 
           th:href="@{/home/} + ${currentPage-3}" 
           th:text="${currentPage-3}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage-2} ge 1" 
           th:href="@{/home/} + ${currentPage-2}" 
           th:text="${currentPage-2}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage-1} ge 1" 
           th:href="@{/home/} + ${currentPage-1}" 
           th:text="${currentPage-1}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" th:text="${currentPage}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage+1} le ${lastPageIndex}" 
           th:href="@{/home/} + ${currentPage+1}" 
           th:text="${currentPage+1}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage+2} le ${lastPageIndex}" 
           th:href="@{/home/} + ${currentPage+2}" 
           th:text="${currentPage+2}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage+3} le ${lastPageIndex}" 
           th:href="@{/home/} + ${currentPage+3}" 
           th:text="${currentPage+3}"></a> 
         </li> 
         <li class="page-item"> 
          <a class="page-link" 
           th:if="${currentPage} lt ${lastPageIndex}" 
           th:href="@{/home/} + ${currentPage+1}">Next</a> 
         </li> 
        </ul> 
       </nav> 
      </div> 

      <div th:replace="/fragments/footer"> </div> 
     </div> 
    </body> 
    </html> 

Head.html Code:

<!DOCTYPE html> 
<html lang="en" 
     xmlns:th="http://www.thymeleaf.org"> 
<head> 
    <div th:fragment="head"> 
     <meta charset="UTF-8" /> 
     <link rel="stylesheet" type="text/css" href="/css/style.css"/> 
     <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" 
       integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" 
       crossorigin="anonymous"/> 
    </div> 
</head> 
</html> 

Wie Sie sehen können, mein Head.html enthält Links zu CSS-Dateien, eine mit Bootstrap, das zweite mit meinem eigene Korrekturen. Lokal funktioniert alles gut. Jede Ansicht ist perfekt geladen. Ich habe nur eine halbe Sekunde Verzögerung zwischen dem Laden der Seite und dem Anwenden von CSS, aber ich denke, auf Heroku wird es gut gehen.

Mein ASPP ist unter diesem Link verfügbar: https://spring-personal-blog.herokuapp.com

Auch gesamte Code meiner App ist in repository auf Github verfügbar.

Antwort

1
  1. Sie haben eine ungültige th:replace Syntax. verwenden sollten

    th:replace="fragments/head :: head" 
    // or 
    th:replace="fragments/head" // instead of th:replace="/fragments/head" 
    
    th:replace="directory/filename :: fragmentName" 
    

    und ähnliche Änderungen für jedes andere Fragment in Ihrer Vorlage

  2. <div> in dir <head>, sollten Sie wahrscheinlich th:remove="tag" verwenden.

    //home.html 
    <div th:replace="fragments/head :: head" th:remove="tag"></div> 
    
    //fragments/head.html 
    <head th:fragment="head">...</head> 
    

PS. Ich habe mit deinem Github-Projekt gespielt und es ist irgendwie merkwürdig, dass deine Notation tatsächlich auf localhost funktioniert, aber auf heroku bricht. Und die obigen Korrekturen lösten es für mich auf heroku DEMO. Btw Ich musste auch passwordEncoder Bean in andere Konfigurationsdatei, weil es nicht auf Heroku starten konnte, sonst

+0

Ich fand, dass, wenn ich meine Anwendung zum zweiten Mal in das gleiche Repository heroku, es wegen der circualr Verweis auf Fehler PasswordEncoder. Keine Ahnung warum. Lokal funktioniert alles gut. – Gromo

+0

Ich habe noch einmal Ihren Beitrag gelesen und die PasswordEncoder-Konfiguration in eine separate Datei verschoben. Alles funktioniert gut. Es gab nur ein kleines Problem mit '/' vor jeder View-Name-Zeichenfolge in Controllern, aber ich habe es in einer Minute behoben. Noch einmal vielen Dank für Ihre Hilfe. – Gromo

Verwandte Themen