2014-10-15 4 views
12

पर ग्रेडल के साथ निर्मित स्प्रिंग ऐप चलाना मुझे ग्रैडल के साथ निर्मित मेरे स्प्रिंग एप्लिकेशन में समस्या है। ऐप में मोंगोडीबी (हेरोोकू से मोंगोएचक्यू) शामिल है।हेरोकू

मैं कामयाब Heroku पर सब कुछ पुश करने के लिए कैसे, मैं अपने प्रोजेक्ट के लिए इस कोड को जोड़ दिया है:

@Configuration 
public class MongoHQConfiguration { 

    public @Bean MongoDbFactory mongoDbFactory() throws MongoException, UnknownHostException { 
     return new SimpleMongoDbFactory(new MongoURI(System.getenv("MONGOHQ_URL"))); 
    } 

    public @Bean MongoTemplate mongoTemplate() throws Exception { 
     return new MongoTemplate(mongoDbFactory()); 
    } 
} 

Gradle साथ एक के लिए buildpacks बदलने के बाद, मैं MongoHQ सैंडबॉक्स साथ Heroku मुक्त अकाउंट सब कुछ धक्का दे दिया।

लेकिन वेब ब्राउज़र के माध्यम से अपने अनुप्रयोग चलाने के लिए कोशिश कर के बाद, मैं इस त्रुटि हो रही है:

An error occurred in the application and your page could not be served. Please try again in a few moments.

If you are the application owner, check your logs for details.

heroku logs मुझे इस उत्पादन देता है:

2014-10-15T18:19:30.293964+00:00 heroku[web.1]: Starting process with command java -Xmx384m -Xss512k -XX:+UseCompressedOops -jar build/libs/*.jar

2014-10-15T18:19:30.797673+00:00 app[web.1]: Error: Unable to access jarfile build/libs/*.jar

2014-10-15T18:19:31.474525+00:00 heroku[web.1]: State changed from starting to crashed

2014-10-15T18:19:31.464753+00:00 heroku[web.1]: Process exited with status 1

2014-10-15T18:19:32.577398+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=tvmaniac.herokuap p.com request_id=7e8bfe6c-2669-405e-9bce-59fde09f71ef fwd="89.129.247.185" dyno= connect= service= status=503 bytes=

2014-10-15T18:19:34.016281+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=tvmani ac.herokuapp.com request_id=4300386e-dc5c-47ed-9878-0bee87128fc9 fwd="89.129.247.185" dyno= connect= service= status=503 bytes=

2014-10-15T18:19:41.988204+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=tvmaniac.herokuap p.com request_id=436db871-ea8c-428f-8cc7-160c3cb96a2d fwd="50.16.146.194" dyno= connect= service= status=503 bytes=

मुझे लगता है कि समस्या Procfile में है, लेकिन मुझे नहीं पता कि मुझे वहां क्या जोड़ना चाहिए, यहां मेरा वर्तमान कोड है:

default_process_types:

web: java $JAVA_OPTS -jar build/libs/*.jar

संपादित यहाँ मेरी build.gradle है:

buildscript { 
    repositories { 
     maven { url "http://repo.spring.io/libs-release" } 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.8.RELEASE") 
    } 
}  

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

mainClassName = "com.shalastra.tvmaniac.TVManiacConfiguration" 

jar { 
    baseName = 'tvmaniac' 
    version = '0.1.0' 
} 

repositories { 
    mavenCentral() 
    maven { url "http://repo.spring.io/libs-release" } 
    maven { url "http://m2.neo4j.org" } 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 

    compile("org.springframework.boot:spring-boot-starter-actuator") 
    testCompile("junit:junit") 

    compile("org.springframework.data:spring-data-rest-webmvc") 
    compile("org.springframework.data:spring-data-mongodb") 

    compile("com.google.guava:guava:17.0") 
    compile("org.apache.commons:commons-lang3:3.3.2") 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.0' 
} 

task stage(dependsOn: ['clean', 'build', 'installApp']) 

आपकी मदद के लिए अग्रिम धन्यवाद।

+0

आप ऐसा कार्य क्यों नहीं जोड़ते हैं जो निर्मित बिल्डिफ़ैक्ट को 'बिल्ड/lib' से' project.rootDir' (उचित रूप से नामित करने) से कॉपी करता है और रूट डीआईआर से आवेदन शुरू करता है? ऐसा लगता है कि कोई जार बनाया गया है। – Opal

+0

क्या आप समझा सकते हैं कि मैं इसे कैसे कर सकता हूं? – Forin

+0

मैं एक मिनट में एक प्रतिक्रिया जोड़ दूंगा। – Opal

उत्तर

18

के बाद टिप्पणी में एक छोटी चर्चा यह (this निर्देशों के अनुसार) लगता है कि आप build.gradle फ़ाइल में निम्न कार्य जोड़ने की जरूरत है:

task stage(type: Copy, dependsOn: [clean, build]) { 
    from jar.archivePath 
    into project.rootDir 
    rename { 
     'app.jar' 
    } 
} 
stage.mustRunAfter(clean) 

clean << { 
    project.file('app.jar').delete() 
} 

और Procfile की सामग्री हो जाएगा:

web: java $JAVA_OPTS -jar app.jar 

अब यह ठीक काम करना चाहिए।

स्पष्टीकरण:

टास्क stage तैयार जार फ़ाइल चलाने के लिए। समाप्त होने के बाद आउटपुट जार को project.rootDir में कॉपी किया गया है और इसका नाम बदलकर app.jar कर दिया गया है। यह गारंटी देता है कि यह हमेशा एक ही नाम होगा और Procfile से कमांड के साथ आसानी से चलाया जा सकता है। stage कार्य clean पर भी निर्भर करता है (जिसमें app.jar को हटाने के लिए अतिरिक्त कार्रवाई है) और build (जो ऐप बनाता है)। stage.mustRunAfter(clean) सेट करना महत्वपूर्ण है क्योंकि अन्यथा जिस क्रम में कार्य चलाया जाता है वह निर्धारित नहीं होता है (यह शायद अब होता है - इसे स्थानीय रूप से जांचें)। मेरा मतलब है कि अगर dependsOn निर्दिष्ट है build चलाया जा सकता है, तो clean और अंत में stage - और कुछ भी नहीं बनाया गया है। मुझे उम्मीद है कि यह स्पष्ट है।

+0

ठीक है, यह ठीक लगता है, लेकिन अब मुझे यह आउटपुट मिल रहा है: [http://pastebin.com/ndKciqye] – Forin

+0

यह पेस्ट बिन हटा दिया गया है। – Opal

+0

http://pastebin.com/3iX9NsEr अब यह ठीक है – Forin

4

मैंने एक उदाहरण बनाया है ताकि नोबियां वास्तव में कोड की हर पंक्ति को देख सकें और समझ सकें। क्योंकि मैं वास्तव में जानता हूं कि यह कितना निराशाजनक हो सकता है।

यह वही अपने Procfile तरह

web: java $JAVA_OPTS -Dserver.port=$PORT -jar app.jar 

यह वही अपने Gradle फ़ाइल की तरह

group 'com.springtest.api' 
version '1.0-SNAPSHOT' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

//Path to the Main Web Class 
mainClassName = "hello.Application" 

jar { 
    baseName = 'spring-test-api' 
    version = '0.1.0' 
} 

repositories { 
    mavenCentral() 
} 

sourceCompatibility = 1.8 

dependencies { 
    testCompile 'junit:junit:4.11' 

    // Spring Framework 
    compile 'org.springframework.boot:spring-boot-starter-web' 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.6' 
} 

task stage(type: Copy, dependsOn: [clean, build]) { 
    from jar.archivePath 
    into project.rootDir 
    rename { 
     'app.jar' 
    } 
} 
stage.mustRunAfter(clean) 

clean << { 
    project.file('app.jar').delete() 
} 

दिखना चाहिए gradlew और gradlew.bat अपने मुख्य परियोजना निर्देशिका में नहीं हैं या तो है दिखना चाहिए है अद्यतित नहीं है तो cmd में gradle wrapper कमांड चलाएं।

यदि आपके कंप्यूटर पर वास्तव में ग्राडल स्थापित नहीं है तो इसे मुख्य ग्रेडल वेबसाइट से इंस्टॉल करें।

गीथब पर मेरा उदाहरण नीचे है। https://github.com/arose13/Heroku-Spring-Gradle_Example

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – ChipsLetten

+1

केके धन्यवाद भाई मैं अब यह करूँगा – SARose

+1

यह आधिकारिक ग्रेडल होना चाहिए, उसकी आधिकारिक वेबसाइट पर कुछ अस्पष्ट ट्यूटोरियल नहीं है: https://devcenter.heroku.com/articles/deploying-gradle-apps-on- Heroku +1 – Simon