Heroku Java 应用程序在本地崩溃但不在网络上

Posted

技术标签:

【中文标题】Heroku Java 应用程序在本地崩溃但不在网络上【英文标题】:Heroku Java app crashing locally but not on the web 【发布时间】:2017-07-14 04:16:26 【问题描述】:

我有我的主要课程:

public class Main 

    public static void main(String[] args)
        Spark.port(getHerokuAssignedPort());
        get("/hello", (req, res) -> "Hello Heroku World");
    



    private static int getHerokuAssignedPort() 
        ProcessBuilder processBuilder = new ProcessBuilder();
        if (processBuilder.environment().get("PORT") != null) 
            return Integer.parseInt(processBuilder.environment().get("PORT"));
        
        return 4567; //return default port if heroku-port isn't set (i.e. on localhost)
    


我的过程文件:

web: java -jar build/libs/CrowdSubhaHeroku-1.0-SNAPSHOT-all.jar

注意:我正在使用 shadowJar,因为正常的 jar 创建不包括我需要的依赖项,例如 Spark 和 Firebase。

现在,如果我这样做:

heroku local web

然后转到localhost:5000,我收到 404 错误。但是,应用程序实际上并没有崩溃。它一直在运行。

这和我做的时候不同:

heroku open

git add .git commit -m "x"git push heroku master 之后

哪个崩溃并出现“应用程序错误”并给我这个ONLY

2017-02-23T15:18:18.848727+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=crowdsubha.herokuapp.com request_id=ce636951-862e-4b2f-a698-924db3039a07 fwd="94.187.7.67" dyno= connect= service= status=503 bytes=
2017-02-23T15:18:20.022743+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=myapp.herokuapp.com request_id=d1e9ec86-ffe4-4a09-9934-81e25378c32c fwd="94.187.7.67" dyno= connect= service= status=503 bytes=

这些是我得到的唯一错误。之前的错误是昨天的日志。

我不确定是什么问题。我怀疑它与shadowJar 有关。但我不确定。

【问题讨论】:

您可以尝试运行heroku logs -t 并让它继续运行。然后在另一个终端会话中运行heroku ps:restart?如果您看到错误消息,请在此处添加。 显然,我的 Jar 文件 (my-app-name-snapshot-1.0-all.jar) 没有部署到 heroku。我使用heroku run ls build/libs/ 进行了验证。但是,正在部署常规 jar 文件。但是由于某种原因,常规jar文件不包含gradle依赖项,如果我使用常规jar,我将无法使用Spark 运行./gradlew clean stage时jar文件是否存在本地? 【参考方案1】:

我发现了问题所在。在使用 git push Heroku master 部署到 Heroku 时,我必须将构建方法从 gradlew clean stage 更改为 gradlew shadowJar

文档中提到了我是如何做到的:

Heroku config:set GRADLE_TASK="shadowJar"

现在,每次执行 git push Heroku master 时,它都不会运行 gradlew clean stage,而是运行 gradlew shadowJar,我使用它来将依赖项包含到我的 Java Web 应用程序中。

【讨论】:

以上是关于Heroku Java 应用程序在本地崩溃但不在网络上的主要内容,如果未能解决你的问题,请参考以下文章

在本地加载 CSS,但不在 Heroku 中加载 Rails 应用程序

Route 使 heroku-app 崩溃,但在 localhost 上工作

动作电缆在本地订阅,但不在 heroku 上

discord.js 机器人在本地工作,但不在 Heroku 上

ROR Cropper JS 在本地工作,但不在 heroku

Heroku 当我在线部署我的应用程序时它崩溃但在我的本地机器上它可以正常工作