2017-02-23 8 views
8

मैं अपने मुख्य वर्ग है पर स्थानीय रूप से नहीं बल्कि दुर्घटनाग्रस्त अनुप्रयोग: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) 
    } 

} 

मेरे procfile:

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

नोट: मैं एक सामान्य जार निर्माण के बाद से shadowJar उपयोग कर रहा हूँ स्पार्क और फायरबेस जैसे मुझे निर्भरता शामिल नहीं है।

अब, अगर मैं ऐसा:

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 के साथ इसका कुछ संबंध है। लेकिन मुझे यकीन नहीं।

+0

क्या आप 'heroku logs -t' चलाने का प्रयास कर सकते हैं और इसे चलाना छोड़ सकते हैं। फिर एक और टर्मिनल सत्र में 'heroku ps: restart' चलाएं? यदि आपको कोई त्रुटि संदेश दिखाई देता है, तो कृपया इसे यहां जोड़ें। – codefinger

+0

स्पष्ट रूप से, मेरी जार फ़ाइल (मेरा-ऐप-नाम-स्नैपशॉट-1.0-all.jar) को उसकेोकू में तैनात नहीं किया जा रहा है। जिसे मैंने 'heroku run ls build/libs/'का उपयोग करके सत्यापित किया है। हालांकि, नियमित जार फ़ाइल तैनात की जा रही है। लेकिन नियमित जार फ़ाइल में किसी कारण से ग्रेबल निर्भरता नहीं होती है, और यदि मैं नियमित जार –

+0

का उपयोग कर रहा हूं तो मैं स्पार्क का उपयोग नहीं कर सकता हूं क्या आप './gradlew क्लीन स्टेज' चलाते समय जार फ़ाइल स्थानीय रूप से मौजूद होती है? – codefinger

उत्तर

3

मुझे पता चला कि समस्या क्या है। मुझे gradlew clean stage से git push Heroku mastergradlew shadowJar के साथ हेरोोक में तैनात करते समय अपनी बिल्ड विधि को बदलना पड़ा।

मैं कैसे किया यह डॉक्स में उल्लेख किया है: जो मैं अपने जावा वेब में निर्भरता को शामिल करने का उपयोग

Heroku config:set GRADLE_TASK="shadowJar" 

अब, हर बार एक git push Heroku master करना है, यह gradlew clean stage नहीं चलता है, लेकिन gradlew shadowJar, आवेदन।