2017-02-23 37 views
8

Mam główne klasy:aplikacja Heroku Java upaść lokalnie, ale nie w sieci

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) 
    } 

} 

Moja procfile:

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

Uwaga: Używam shadowJar od normalnego tworzenia słoik nie obejmuje zależności, których potrzebuję, takich jak Spark i Firebase.

Teraz, jeśli zrobić:

heroku local web 

i przejdź do localhost:5000, pojawia się błąd 404. Jednak aplikacja faktycznie nie ulega awarii. Pozostaje uruchomiony.

To przeciwieństwie kiedy zrobić:

heroku open 

Po git add ., git commit -m "x" i git push heroku master

Które wywala z "Application Error" i daje mi to TYLKO:

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= 

To są jedyne błędy, które dostałem. Poprzednie błędy to dzienniki z wczoraj.

Nie jestem do końca pewien, na czym polega problem. Podejrzewam, że ma to coś wspólnego z shadowJar. Ale nie jestem pewien.

+0

Czy możesz spróbować uruchomić 'heroku logs -t' i pozostawić go uruchomionym. Następnie w innej sesji terminalowej uruchom 'heroku ps: restart'? Jeśli zobaczysz komunikat o błędzie, dodaj go tutaj. – codefinger

+0

Wygląda na to, że mój plik Jar (my-app-name-snapshot-1.0-all.jar) nie jest wdrażany w heroku. Które zweryfikowałem używając 'heroku run ls build/libs /'. Jednak wdrażany jest zwykły plik jar. Ale zwykły plik jar nie zawiera zależności gradle z jakiegoś powodu i nie mogę używać Sparka, jeśli używam zwykłego słoika. –

+0

Czy plik JAR istnieje lokalnie po uruchomieniu './gradlew clean stage'? – codefinger

Odpowiedz

3

Dowiedziałem się, o co chodzi. Musiałem zmienić metodę kompilacji z gradlew clean stage po wdrożeniu w Heroku z git push Heroku master do gradlew shadowJar.

Jak zrobiłem to wspomniano w docs:

Heroku config:set GRADLE_TASK="shadowJar" 

Teraz, za każdym razem zrobić git push Heroku master, to nie działa gradlew clean stage, ale gradlew shadowJar, którego używam do włączenia zależności do mojej sieci Java podanie.