2016-10-20 4 views
2

IDEA의 tomcat 7.0.72에서 실행되는 Spring MVC에 간단한 애플리케이션이있다. 이 응용 프로그램을 Heroku에서 실행할 수있는 방법 (가능한 경우). 나는 Heroku 계정을 가지고 있고 거기에 응용 프로그램을 만들었습니다. 나는 Maven을 배포 용으로, Git을 Heroku 용으로 사용한다. 파일은 아래에 있습니다. 그래서, 내가 그것을 바람둥이로 localhost에서 실행하면 작동합니다. 내가 Heroku가에 밀어 그러나 나는 그것을 얻을 : 내 응용 프로그램의Heroku에서 Spring MVC 애플리케이션을 실행하려면 어떻게해야합니까?

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.mardmitry</groupId> 
    <artifactId>bestmuzon</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <name>BestMuzon</name> 
    <!--<url>http://maven.apache.org</url>--> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <spring-framework-version>4.1.5.RELEASE</spring-framework-version> 
     <tomcat.version>8.5.6</tomcat.version> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring-framework-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring-framework-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring-framework-version}</version> 
     </dependency> 

     <!--JSF (include "jsf-api" and "jsf-impl")--> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.faces</artifactId> 
      <version>2.2.10</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-core</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-logging-juli</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jasper</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jasper-el</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jsp-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.github.jsimone</groupId> 
      <artifactId>webapp-runner</artifactId> 
      <version>8.0.30.2</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <url>https://bestmuzonproject.herokuapp.com/</url> 
        <!--<url>http://localhost:8080/manager/text</url>--> 
        <server>TomcatServer</server> 
        <path>/mkyongWebApp</path> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.3</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals><goal>copy</goal></goals> 
         <configuration> 
          <artifactItems> 
           <artifactItem> 
            <groupId>com.github.jsimone</groupId> 
            <artifactId>webapp-runner</artifactId> 
            <version>8.0.30.2</version> 
            <destFileName>webapp-runner.jar</destFileName> 
           </artifactItem> 
          </artifactItems> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

구조 :

Application Error:

An error occurred in the application and your page could not be served. Please try again in a few moments. If you are the application owner, check your logs for details.

이 내 pom.xml 파일입니다 Structure of app

의 web.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 

    <!-- Add Support for Spring --> 
    <!-- Создает Spring Container, доступный всем сервлетам и фильтрам --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Обрабатывает все запросы. Центральное понятие--> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.form</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

MainController :

package com.mardmitry.controllers; 

import com.mardmitry.model.User; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class MainController { 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView main() { 

     ModelAndView modelAndView = new ModelAndView(); 
     modelAndView.addObject("userJSP", new User()); 
     modelAndView.setViewName("index"); 
     return modelAndView; 
    } 

    /*как только на index.jsp подтвердится форма 
    <spring:form method="post" modelAttribute="userJSP" action="check-user">, 
    то попадем вот сюда 
    */ 
    @RequestMapping(value = "/check-user") 
    public ModelAndView checkUser(@ModelAttribute("userJSP") User user) { 
     ModelAndView modelAndView = new ModelAndView(); 
     modelAndView.setViewName("secondPage"); 
     modelAndView.addObject("userJSP", user); 

     return modelAndView; 
    } 
} 

의 index.jsp : 망할 놈의

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags/form" %> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 

<html> 
    <head> 
    <title>Best Muzon</title> 
    </head> 
    <body> 
    <spring:form method="post" modelAttribute="userJSP" action="check-user"> 

     Name: <spring:input path="name"/> (path="" - указывает путь, используемый в modelAttribute=''. в нашем случае User.name) <br/> 
     Password: <spring:input path="password"/> <br/> 
     <spring:button>Next Page</spring:button> 

    </spring:form> 
    </body> 
</html> 

빌드 로그 :

Counting objects: 359, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (282/282), done. 
Writing objects: 100% (359/359), 20.70 MiB | 99.00 KiB/s, done. 
Total 359 (delta 130), reused 0 (delta 0) 
remote: Compressing source files... done. 
remote: Building source: 
remote: 
remote: -----> Java app detected 
remote: -----> Installing OpenJDK 1.8... done 
remote: -----> Installing Maven 3.3.9... done 
remote: -----> Executing: mvn -B -DskipTests clean dependency:list install 
remote:  [INFO] Scanning for projects... 
remote:  [INFO] 
remote:  [INFO] ------------------------------------------------------------------------ 
remote:  [INFO] Building BestMuzon 1.0-SNAPSHOT 
remote:  [INFO] ------------------------------------------------------------------------ 
remote:  [INFO] 
remote:  [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ bestmuzon --- 
remote:  [INFO] Deleting /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/target 
remote:  [INFO] 
remote:  [INFO] --- maven-dependency-plugin:2.3:list (default-cli) @ bestmuzon --- 
remote:  [INFO] 
remote:  [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ bestmuzon --- 
remote:  [INFO] Using 'UTF-8' encoding to copy filtered resources. 
remote:  [INFO] skip non existing resourceDirectory /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/src/main/resources 
remote:  [INFO] 
remote:  [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ bestmuzon --- 
remote:  [INFO] Changes detected - recompiling the module! 
remote:  [INFO] Compiling 2 source files to /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/target/classes 
remote:  [INFO] 
remote:  [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ bestmuzon --- 
remote:  [INFO] Using 'UTF-8' encoding to copy filtered resources. 
remote:  [INFO] skip non existing resourceDirectory /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/src/test/resources 
remote:  [INFO] 
remote:  [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ bestmuzon --- 
remote:  [INFO] No sources to compile 
remote:  [INFO] 
remote:  [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ bestmuzon --- 
remote:  [INFO] Tests are skipped. 
remote:  [INFO] 
remote:  [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ bestmuzon --- 
remote:  [INFO] Building jar: /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/target/bestmuzon-1.0-SNAPSHOT.jar 
remote:  [INFO] 
remote:  [INFO] --- maven-dependency-plugin:2.3:copy (default) @ bestmuzon --- 
remote:  [INFO] Configured Artifact: com.github.jsimone:webapp-runner:8.0.30.2:jar 
remote:  [INFO] Copying webapp-runner-8.0.30.2.jar to /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/target/dependency/webapp-runner.jar 
remote:  [INFO] 
remote:  [INFO] --- maven-install-plugin:2.4:install (default-install) @ bestmuzon --- 
remote:  [INFO] Installing /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/target/bestmuzon-1.0-SNAPSHOT.jar to /app/tmp/cache/.m2/repository/com/mardmitry/bestmuzon/1.0-SNAPSHOT/bestmuzon-1.0-SNAPSHOT.jar 
remote:  [INFO] Installing /tmp/build_90aea2b2f1ce2e21c7e6a87e78ae382d/pom.xml to /app/tmp/cache/.m2/repository/com/mardmitry/bestmuzon/1.0-SNAPSHOT/bestmuzon-1.0-SNAPSHOT.pom 
remote:  [INFO] ------------------------------------------------------------------------ 
remote:  [INFO] BUILD SUCCESS 
remote:  [INFO] ------------------------------------------------------------------------ 
remote:  [INFO] Total time: 3.629 s 
remote:  [INFO] Finished at: 2016-10-20T10:34:05+00:00 
remote:  [INFO] Final Memory: 22M/171M 
remote:  [INFO] ------------------------------------------------------------------------ 
remote: -----> Discovering process types 
remote:  Procfile declares types -> web 
remote: 
remote: -----> Compressing... 
remote:  Done: 70M 
remote: -----> Launching... 
remote:  Released v23 
remote:  https://bestmuzonproject.herokuapp.com/ deployed to Heroku 
remote: 
remote: Verifying deploy.... done. 
To https://git.heroku.com/bestmuzonproject.git 
+ 8306e15...83a9a0c master -> master (forced update) 

Heroku가 로그 :

2016-10-20T10:34:13.261601+00:00 heroku[api]: Deploy 83a9a0c by [email protected] 
2016-10-20T10:34:13.261601+00:00 heroku[api]: Release v23 created by [email protected] 
2016-10-20T10:34:13.409620+00:00 heroku[slug-compiler]: Slug compilation finished 
2016-10-20T10:34:13.409611+00:00 heroku[slug-compiler]: Slug compilation started 
2016-10-20T10:34:13.962566+00:00 heroku[web.1]: Restarting 
2016-10-20T10:34:13.963376+00:00 heroku[web.1]: State changed from up to starting 
2016-10-20T10:34:16.874279+00:00 heroku[web.1]: Stopping all processes with SIGTERM 
2016-10-20T10:34:17.556730+00:00 heroku[web.1]: Starting process with command `sh target/bin/webapp` 
2016-10-20T10:34:18.183328+00:00 heroku[web.1]: Process exited with status 143 
2016-10-20T10:34:19.795333+00:00 heroku[web.1]: State changed from starting to crashed 
2016-10-20T10:34:19.796435+00:00 heroku[web.1]: State changed from crashed to starting 
2016-10-20T10:34:19.682528+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them. 
2016-10-20T10:34:19.686998+00:00 app[web.1]: sh: 0: Can't open target/bin/webapp 
2016-10-20T10:34:19.777080+00:00 heroku[web.1]: Process exited with status 127 
2016-10-20T10:34:23.291738+00:00 heroku[web.1]: Starting process with command `sh target/bin/webapp` 
2016-10-20T10:34:24.945775+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them. 
2016-10-20T10:34:24.946678+00:00 app[web.1]: sh: 0: Can't open target/bin/webapp 
2016-10-20T10:34:25.024482+00:00 heroku[web.1]: State changed from starting to crashed 
2016-10-20T10:34:25.009062+00:00 heroku[web.1]: Process exited with status 127 
2016-10-20T10:34:57.262474+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=bestmuzonproject.herokuapp.com request_id=1acd63ba-7e38-4279-881c-2eb1a1708a63 fwd="178.94.207.167" dyno= connect= service= status=503 bytes= 
2016-10-20T10:35:38.838802+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=bestmuzonproject.herokuapp.com request_id=cafaddfe-5c81-4d00-a47d-9c1111d6053b fwd="178.94.207.167" dyno= connect= service= status=503 bytes= 
+0

다음은 가이드입니다. https://devcenter.heroku.com/articles/getting-started-with-spring-mvc-hibernate –

+0

나는 이것을보고 그것을 시도했습니다. 하지만 앱 오류. 그리고 그것의 응용 프로그램에서 다른 매너/형식으로 쓴. – Dmitry

+0

로그에 무엇이 표시됩니까? –

답변

1

있다 (적어도) 두 가지 배포 스타일 자바 웹 응용 프로그램 :

첫 번째는 여기에 자세히 설명되어 있습니다 :

https://devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat

두 번째는 여기에 자세히 설명되어 있습니다 :

https://devcenter.heroku.com/articles/java-webapp-runner

당신은 당신의 POM 모두 메커니즘의 혼합 요소를 갖고있는 것 같다 예를 웹 애플리케이션 주자에 대한 두 번째 스타일에서만 필요합니다.

이러한 충돌을 제거하고 구성을 확인하십시오.

+0

그래서 바람둥이와 영웅에 의해 IDEA에서 실행할 수있는 앱을 만들 수 없습니까? – Dmitry

+0

두 번째 방법으로 시도합니다. – Dmitry

+0

IDEA에서 배포 할 수 있습니다. https://devcenter.heroku.com/articles/deploying-java-applications-to-heroku-from-eclipse-or-intellij-idea 또는 스프링 부트 실습 읽기 8 장 –

관련 문제