gpt4 book ai didi

java - 在 Heroku 上运行使用 gradle 构建的 Spring 应用程序

转载 作者:IT老高 更新时间:2023-10-28 13:56:21 25 4
gpt4 key购买 nike

我使用 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());
}
}

使用 gradle 将 buildpacks 更改为一个后,我使用 MongoHQ Sandbox 将所有内容推送到 Heroku 免费帐户。

但是在尝试通过网络浏览器运行我的应用程序后,我收到了这个错误:

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.

heroku logs 给了我这个输出:

2014-10-15T18:19:30.293964+00:00 heroku[web.1]: Starting process with command java -Xmx384m -Xss512k -XX:+UseCompressedOops -jar build/libs/*.jar

2014-10-15T18:19:30.797673+00:00 app[web.1]: Error: Unable to access jarfile build/libs/*.jar

2014-10-15T18:19:31.474525+00:00 heroku[web.1]: State changed from starting to crashed

2014-10-15T18:19:31.464753+00:00 heroku[web.1]: Process exited with status 1

2014-10-15T18:19:32.577398+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=tvmaniac.herokuap p.com request_id=7e8bfe6c-2669-405e-9bce-59fde09f71ef fwd="89.129.247.185" dyno= connect= service= status=503 bytes=

2014-10-15T18:19:34.016281+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=tvmani ac.herokuapp.com request_id=4300386e-dc5c-47ed-9878-0bee87128fc9 fwd="89.129.247.185" dyno= connect= service= status=503 bytes=

2014-10-15T18:19:41.988204+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=tvmaniac.herokuap p.com request_id=436db871-ea8c-428f-8cc7-160c3cb96a2d fwd="50.16.146.194" dyno= connect= service= status=503 bytes=

我认为问题出在 Procfile 中,但我不知道应该在那里添加什么,这是我当前的代码:

default_process_types:

web: java $JAVA_OPTS -jar build/libs/*.jar

已编辑

这是我的 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'])

提前感谢您的帮助。

最佳答案

在评论中进行简短讨论后,您似乎需要将以下任务添加到 build.gradle 文件中(根据 this 说明):

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

现在它应该可以正常工作了。

解释:

Task stage 准备要运行的 jar 文件。完成后,将输出 jar 复制到 project.rootDir 并重命名为 app.jar。它保证它始终具有相同的名称,并且可以使用 Procfile 中的命令轻松运行。 stage 任务还依赖于 clean(它有一个额外的 Action 来删除 app.jar)和 build(它构建应用程序)。设置 stage.mustRunAfter(clean) 很重要,否则无法确定任务运行的顺序(这可能现在发生 - 在本地检查)。我的意思是,如果只指定了 dependsOn被 build 。我希望它很清楚。

关于java - 在 Heroku 上运行使用 gradle 构建的 Spring 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com