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.