[SPRING] Heroku에서 gradle로 빌드 된 Spring 애플리케이션 실행
SPRINGHeroku에서 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.주석의 짧은 토론 후 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.모범 사례를 만들어 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
from https://stackoverflow.com/questions/26389679/running-spring-app-built-with-gradle-on-heroku by cc-by-sa and MIT license