복붙노트

[SPRING] Heroku에서 gradle로 빌드 된 Spring 애플리케이션 실행

SPRING

Heroku에서 gradle로 빌드 된 Spring 애플리케이션 실행

나는 Gradle로 만든 Spring 애플리케이션에 문제가있다. 응용 프로그램은 MongoDB (Heroku의 MongoHQ)를 포함합니다.

나는 heroku에서 모든 것을 푸는 방법을 관리했고, 나는이 코드를 프로젝트에 추가했다 :

@Configuration
public class MongoHQConfiguration {

    public @Bean MongoDbFactory mongoDbFactory() throws MongoException, UnknownHostException {
        return new SimpleMongoDbFactory(new MongoURI(System.getenv("MONGOHQ_URL")));
    }

    public @Bean MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

buildpack을 gradle로 변경 한 후, 나는 MongoHQ Sandbox와 함께 Heroku 무료 계정의 모든 것을 푸시했습니다.

하지만 웹 브라우저를 통해 내 앱을 실행하려고하면이 오류가 발생합니다.

heroku 로그를 통해 다음과 같은 결과를 얻을 수 있습니다.

나는 문제가 Procfile에 있다고 생각하지만, 나는 거기에 무엇을 추가해야하는지 모른다. 현재 코드가있다.

편집 됨

내 build.gradle입니다 :

buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-release" }
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.8.RELEASE")
    }
}    

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

mainClassName = "com.shalastra.tvmaniac.TVManiacConfiguration"

jar {
    baseName = 'tvmaniac'
    version = '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-release" }
    maven { url "http://m2.neo4j.org" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")

    compile("org.springframework.boot:spring-boot-starter-actuator")
    testCompile("junit:junit")

    compile("org.springframework.data:spring-data-rest-webmvc")
    compile("org.springframework.data:spring-data-mongodb")

    compile("com.google.guava:guava:17.0")
    compile("org.apache.commons:commons-lang3:3.3.2")
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.0'
}

task stage(dependsOn: ['clean', 'build', 'installApp'])

도와 주셔서 미리 감사드립니다.

해결법

  1. ==============================

    1.주석의 짧은 토론 후 build.gradle 파일에 다음 작업을 추가해야한다고 (이 지침에 따라) 보인다 :

    주석의 짧은 토론 후 build.gradle 파일에 다음 작업을 추가해야한다고 (이 지침에 따라) 보인다 :

    task stage(type: Copy, dependsOn: [clean, build]) {
        from jar.archivePath
        into project.rootDir 
        rename {
            'app.jar'
        }
    }
    stage.mustRunAfter(clean)
    
    clean << {
        project.file('app.jar').delete()
    }
    

    Procfile의 내용은 다음과 같습니다.

    web: java $JAVA_OPTS -jar app.jar
    

    이제 제대로 작동합니다.

    설명:

    작업 단계는 실행될 jar 파일을 준비합니다. 완료되면 출력 jar가 project.rootDir에 복사되고 app.jar로 이름이 바뀝니다. 그것은 항상 동일한 이름을 가지며 Procfile의 명령으로 쉽게 실행될 수 있습니다. 무대 작업은 또한 clean (app.jar을 제거하는 추가 작업이 있음) 및 build (앱을 빌드하는)에 따라 달라집니다. stage.mustRunAfter (clean)을 설정하는 것이 중요합니다. 그렇지 않으면 작업이 실행되는 순서가 결정되지 않기 때문입니다 (현재 상황이 발생할 수 있습니다 - 로컬로 확인하십시오). 내가 말하고자하는 것은 dependsOn이 지정되어 빌드가 실행 된 다음 깨끗하고 마지막 단계 일 때 - 아무것도 생성되지 않는다는 것입니다. 나는 그것이 분명하기를 바란다.

  2. ==============================

    2.모범 사례를 만들어 noobies가 코드의 모든 라인을 실제로 확인하고 이해할 수 있도록했습니다. 나는 이것이 얼마나 실망 스러울지를 알고 있기 때문에 알아낼 수 있습니다.

    모범 사례를 만들어 noobies가 코드의 모든 라인을 실제로 확인하고 이해할 수 있도록했습니다. 나는 이것이 얼마나 실망 스러울지를 알고 있기 때문에 알아낼 수 있습니다.

    이것은 당신의 Procfile이 보일 것입니다.

    web: java $JAVA_OPTS -Dserver.port=$PORT -jar app.jar
    

    이것은 귀하의 Gradle 파일의 모습입니다.

    group 'com.springtest.api'
    version '1.0-SNAPSHOT'
    
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'spring-boot'
    
    //Path to the Main Web Class
    mainClassName = "hello.Application"
    
    jar {
        baseName = 'spring-test-api'
        version = '0.1.0'
    }
    
    repositories {
        mavenCentral()
    }
    
    sourceCompatibility = 1.8
    
    dependencies {
        testCompile 'junit:junit:4.11'
    
        // Spring Framework
        compile 'org.springframework.boot:spring-boot-starter-web'
    }
    
    task wrapper(type: Wrapper) {
        gradleVersion = '2.6'
    }
    
    task stage(type: Copy, dependsOn: [clean, build]) {
        from jar.archivePath
        into project.rootDir
        rename {
            'app.jar'
        }
    }
    stage.mustRunAfter(clean)
    
    clean << {
        project.file('app.jar').delete()
    }
    

    gradlew 및 gradlew.bat가 주 프로젝트 디렉토리에 없거나 최신이 아닌 경우 cmd에서 gradle wrapper 명령을 실행하십시오.

    실제로 Gradle을 컴퓨터에 설치하지 않은 경우 메인 gradle 웹 사이트에서 설치하십시오.

    github에 대한 나의 예가 아래와 같습니다. https://github.com/arose13/Heroku-Spring-Gradle_Example

  3. from https://stackoverflow.com/questions/26389679/running-spring-app-built-with-gradle-on-heroku by cc-by-sa and MIT license