Java-приложение Heroku падает локально, но не в Интернете

У меня есть мой основной класс:

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

Который вылетает с "Ошибка приложения" и дает мне это ТОЛЬКО:

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, Но я не уверен.

1 ответ

Решение

Я выяснил, в чем проблема. Я должен был изменить свой метод сборки gradlew clean stage при развертывании в Heroku с git push Heroku master в gradlew shadowJar,

Как я это сделал, упоминается в документации:

Heroku config:set GRADLE_TASK="shadowJar"

Теперь каждый раз, чтобы сделать git push Heroku masterне запускается gradlew clean stage, но gradlew shadowJar, который я использую, чтобы включить зависимости в мое веб-приложение Java.

Другие вопросы по тегам