2017-04-09 158 views
1

我想在Heroku上部署我的Grails 3應用程序。無法在Heroku上部署我的Grails 3應用程序

我已經提到了this blog,並且遵循了每一步,但是當我嘗試運行git push heroku master命令時,會生成以下輸出。

remote:  FAILURE: Build failed with an exception. 
remote:   
remote:  * What went wrong: 
remote:  Task 'stage' not found in root project 'build_6ce46a3ec9d8cecee177ef2d3589c9f1'. 
remote:   
remote:  * Try: 
remote:  Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 
remote:   
remote:  BUILD FAILED 
remote:   
remote:  Total time: 1 mins 2.541 secs 
remote: 
remote: !  ERROR: Failed to run Gradle! 
remote:  It looks like your project does not contain a 'stage' task, which Heroku needs in order 
remote:  to build your app. Our Dev Center article on preparing a Gradle application for Heroku 
remote:  describes how to create this task: 
remote:  https://devcenter.heroku.com/articles/deploying-gradle-apps-on-heroku 
remote:   
remote:  If you're stilling having trouble, please submit a ticket so we can help: 
remote:  https://help.heroku.com 
remote:   
remote:  Thanks, 
remote:  Heroku 
remote: 
remote: !  Push rejected, failed to compile Gradle app. 
remote: 
remote: !  Push failed 
remote: Verifying deploy... 
remote: 
remote: ! Push rejected to employeedatabase. 
remote: 

所以按輸出,我提到this文章Heroku的提供並做了一些改動。 現在,每當我嘗試運行命令./gradlew stage一切工作正常,但是當我嘗試運行heroku應用程序本地使用heroku local web下面的輸出產生。

[WARN] No ENV file found 
10:14:18 PM web.1 | Expanding EmployeeDatabase-0.1.war into /home/ankit/Desktop/Causecode/EmployeeDatabase/build/target/tomcat.5000/webapps/expanded 
10:14:18 PM web.1 | Adding Context for /home/ankit/Desktop/Causecode/EmployeeDatabase/build/target/tomcat.5000/webapps/expanded 
10:14:19 PM web.1 | Apr 09, 2017 10:14:19 PM org.apache.coyote.AbstractProtocol init 
10:14:19 PM web.1 | INFO: Initializing ProtocolHandler ["http-nio-5000"] 
10:14:19 PM web.1 | Apr 09, 2017 10:14:19 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
10:14:19 PM web.1 | INFO: Using a shared selector for servlet write/read 
10:14:19 PM web.1 | Apr 09, 2017 10:14:19 PM org.apache.catalina.core.StandardService startInternal 
10:14:19 PM web.1 | INFO: Starting service Tomcat 
10:14:19 PM web.1 | Apr 09, 2017 10:14:19 PM org.apache.catalina.core.StandardEngine startInternal 
10:14:19 PM web.1 | INFO: Starting Servlet Engine: Apache Tomcat/8.0.30 
10:14:19 PM web.1 | Apr 09, 2017 10:14:19 PM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment 
10:14:19 PM web.1 | INFO: No global web.xml found 
10:14:28 PM web.1 | Apr 09, 2017 10:14:28 PM org.apache.jasper.servlet.TldScanner scanJars 
10:14:28 PM web.1 | INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 
10:14:29 PM web.1 | Apr 09, 2017 10:14:29 PM org.apache.catalina.core.ApplicationContext log 
10:14:29 PM web.1 | INFO: 2 Spring WebApplicationInitializers detected on classpath 
10:14:33 PM web.1 | Exception in thread "main" org.apache.catalina.LifecycleException: Failed to start component [StandardServer[-1]] 
10:14:33 PM web.1 |  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
10:14:33 PM web.1 |  at org.apache.catalina.startup.Tomcat.start(Tomcat.java:344) 
10:14:33 PM web.1 |  at webapp.runner.launch.Main.main(Main.java:261) 
10:14:33 PM web.1 | Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Tomcat]] 
10:14:33 PM web.1 |  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
10:14:33 PM web.1 |  at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769) 
10:14:33 PM web.1 |  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
10:14:33 PM web.1 |  ... 2 more 
10:14:33 PM web.1 | Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat]] 
10:14:33 PM web.1 |  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
10:14:33 PM web.1 |  at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441) 
10:14:33 PM web.1 |  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
10:14:33 PM web.1 |  ... 4 more 
10:14:33 PM web.1 | Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
10:14:33 PM web.1 |  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924) 
10:14:33 PM web.1 |  at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 
10:14:33 PM web.1 |  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
10:14:33 PM web.1 |  ... 6 more 
[DONE] Killing all processes with signal null 
10:14:33 PM web.1 Exited with exit code 1 

這是我Procfile:

web: cd build ; java -Dgrails.env=prod -jar ../build/server/webapp-runner-*.jar --expand-war --port $PORT libs/*.war 

,這是我build.gradle

buildscript { 
    ext { 
     grailsVersion = project.grailsVersion 
    } 
    repositories { 
     mavenLocal() 
     maven { url "https://repo.grails.org/grails/core" } 
    } 
    dependencies { 
     classpath "org.grails:grails-gradle-plugin:$grailsVersion" 
     classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.8.2" 
     classpath "org.grails.plugins:hibernate4:5.0.10" 
    } 
} 

plugins { 
    id "io.spring.dependency-management" version "0.4.0.RELEASE" 
} 

version "0.1" 
group "employeedatabase" 

apply plugin: "spring-boot" 
apply plugin:"eclipse" 
apply plugin:"idea" 
apply plugin:"war" 
apply plugin:"org.grails.grails-web" 
apply plugin:"org.grails.grails-gsp" 
apply plugin:"asset-pipeline" 

ext { 
    grailsVersion = project.grailsVersion 
    gradleWrapperVersion = project.gradleWrapperVersion 
} 

repositories { 
    mavenLocal() 
    maven { url "https://repo.grails.org/grails/core" } 
} 

dependencyManagement { 
    imports { 
     mavenBom "org.grails:grails-bom:$grailsVersion" 
    } 
    applyMavenExclusions false 
} 

dependencies { 
    compile "org.springframework.boot:spring-boot-starter-logging" 
    compile "org.springframework.boot:spring-boot-autoconfigure" 
    compile "org.grails:grails-core" 
    compile "org.springframework.boot:spring-boot-starter-actuator" 
    compile "org.springframework.boot:spring-boot-starter-tomcat" 
    compile "org.grails:grails-dependencies" 
    compile "org.grails:grails-web-boot" 
    compile "org.grails.plugins:cache" 
    compile "org.grails.plugins:scaffolding" 
    compile "org.grails.plugins:hibernate4" 
    compile "org.hibernate:hibernate-ehcache" 
    console "org.grails:grails-console" 
    profile "org.grails.profiles:web" 
    runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.8.2" 

    runtime 'org.postgresql:postgresql:9.4-1201-jdbc4' 
    provided "org.springframework.boot:spring-boot-starter-tomcat" 

    //runtime "com.h2database:h2" 
    runtime "mysql:mysql-connector-java:5.1.29" 
    testCompile "org.grails:grails-plugin-testing" 
    testCompile "org.grails.plugins:geb" 
    testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1" 
    testRuntime "net.sourceforge.htmlunit:htmlunit:2.18" 

    compile 'org.eclipse.jetty:jetty-runner:9.2.11.v20150529' 
    compile 'com.github.jsimone:webapp-runner:8.0.30.2' 

    //adding spring security core plugin 
    compile 'org.grails.plugins:spring-security-core:3.0.3' 
    //adding oauth plugin 
    compile 'org.grails.plugins:oauth:3.0.1' 
} 

assets { 
    minifyJs = true 
    minifyCss = true 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = gradleWrapperVersion 
} 

task stage() { 
    dependsOn clean, war 
} 
tasks.stage.doLast() { 
    delete fileTree(dir: "build/distributions") 
    delete fileTree(dir: "build/assetCompile") 
    delete fileTree(dir: "build/distributions") 
    delete fileTree(dir: "build/libs", exclude: "*.war") 
} 
war.mustRunAfter clean 

task copyToLib(type: Copy) { 
    into "$buildDir/server" 
    from(configurations.compile) { 
     include "webapp-runner*" 
    } 
} 

stage.dependsOn(copyToLib) 

我使用Grails 3.1.10。如果您已經在Heroku上成功部署了Grails 3應用程序,那麼一步一步的方法將是無價的。

+0

在Heroku上運行應用程序時(在添加'stage'任務後),你會得到同樣的異常嗎? – codefinger

+0

@codefinger:是! –

回答

0

我對Heroku沒有任何經驗,但是我在您的build.gradle中看到一個問題。你提到的在Heroku上運行的Grails 3的應用程序,文檔,鏈接要求你兩個依賴添加到您的build.gradle

runtime 'postgresql:postgresql:8.4-702.jdbc3' 
provided "org.springframework.boot:spring-boot-starter-tomcat" 

,但將相關org.springframework.boot:spring-boot-starter-tomcat是已經存在的build.gradle範圍compile下,所以有重複的依賴關係。

org.springframework.boot:spring-boot-starter-tomcat是在Grails 3中提供的嵌入式tomcat,如果您要在獨立的tomcat上部署,則必須將其刪除,否則如果在嵌入式tomcat中運行WAR,則會有兩個tomcat實例,並且我認爲您的錯誤是全部。

按照docs

注意,默認情況下,Grails將包括 的Tomcat WAR文件中可嵌入的版本,如果你部署到 不同版本的Tomcat這可能會導致問題。如果你不打算使用嵌入式 容器,那麼你應該更改Tomcat的範圍在 的build.gradle部署到生產容器依賴 來提供前:

provided "org.springframework.boot:spring-boot-starter-tomcat" 

因此,考慮刪除該行compile "org.springframework.boot:spring-boot-starter-tomcat"

相關問題