2017-02-23 133 views
8

我有我的主類在本地,但沒有崩潰:Heroku的Java應用程序的網絡

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

} 

我procfile:

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

注:我使用shadowJar因爲一個正常的罐子創作不包括我需要的依賴關係,例如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有關。但我不確定。

+0

你可以嘗試運行'heroku logs -t'並讓它運行。然後在另一個終端會話中運行'heroku ps:restart'?如果您看到錯誤訊息,請在此處添加。 – codefinger

+0

顯然,我的jar文件(my-app-name-snapshot-1.0-all.jar)沒有被部署到heroku。我使用'heroku運行ls build/libs /'來驗證。但是,正在部署常規jar文件。但是由於某些原因,常規jar文件不包含gradle依賴關係,並且如果我使用常規jar,則不能使用Spark –

+0

運行'./gradlew clean stage'時,jar文件是否存在於本地? – codefinger

回答

3

我發現了什麼問題。部署到Heroku時,必須將gradlew clean stage中的構建方法更改爲git push Heroku mastergradlew shadowJar

我怎麼做的是在文檔中提到:現在

Heroku config:set GRADLE_TASK="shadowJar" 

,每次做git push Heroku master,它不運行gradlew clean stage,但gradlew shadowJar,我用它來包括依賴關係到我的Java Web應用。