在CloudFoundry上启动Grails应用程序时,“状态未确定”

时间:2012-08-25 21:11:48

标签: grails cloudfoundry

我有一个Grails应用程序已经在CloudFoundry上运行了好几个月。我将应用程序从Grails 2.0.4更新到2.1.0,并更新了我一直在使用的一些插件。

现在,当我将应用程序推送到CloudFoundry并开始时,我收到错误:

'appname'状态未确定,信息不足。

tomcat Catalina日志显示下面的NoClassDefFoundError。

我已经阅读了Ivy cache的问题,但还没有考虑过。我已将vmc更新到最新版本(0.3.18)。

SEVERE: Error deploying web application directory ROOT
java.lang.NoClassDefFoundError: org/apache/tomcat/PeriodicEventListener
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.PeriodicEventListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    ... 34 more

5 个答案:

答案 0 :(得分:3)

从Grails 1.3.7迁移到2.1.1时,我遇到了这个问题。

我通过解压缩WAR文件,删除所有tomcat - * .jar文件(有几个tomcat嵌入式jar)然后重启Tomcat来修复它。

我已经运行了Tomcat 6,我想知道这是不是问题?无论如何,我的应用程序现在正在工作 - 虽然这不是最好的安装程序!

答案 1 :(得分:2)

我从2.1.0回滚到Grails 2.0.4解决了这个问题。我认为问题可能是described here。但是Graeme提供的解决方法在部署到cloudfoundry.com时没有解决问题。

在Grails 2.1.0下本地运行此应用程序没有问题,但在cloudfoundry.com下无效。

答案 2 :(得分:2)

我没有使用CloudFoundry,但遇到了将Grails 2.1 WAR部署到Tomcat 6的相同问题。目前,我已配置_Events.groovy以删除嵌入式tomcat-grails-plugin-tomcat- WAR生成之前来自WAR临时区域的jar:

eventCreateWarStart = { warName, stagingDir ->
    // Work-around to remove tomcat jars from .war.
    File libDir = new File("${stagingDir}/WEB-INF/lib/")
    if (libDir.exists() && libDir.isDirectory()) {
        ant.echo(message: 'Events.eventCreateWarStart: Removing embedded tomcat .jars from .war.')
        libDir.eachFileMatch(FileType.FILES, ~/^(tomcat|grails-plugin-tomcat).*\.jar$/) { File jarToRemove ->
            jarToRemove.delete()
        }
    }
}

(可能没有必要进行libDir.exists() && libDir.isDirectory()检查。)

现在这种方法很有用,但获得真正的解决方案而不是解决方法会很好。

答案 3 :(得分:1)

我对spring应用程序有同样的问题。重新启动服务~sunrowfoundry / vcap / dev_setup / bin / vcap stop,cloudfoundry / vcap / dev_setup / bin / vcap start我设法推送我的应用程序没有任何问题。安装在更强大的机器上的CF可能会有所帮助。你目前的硬件是什么?

答案 4 :(得分:1)

我知道这个问题是关于Grails和CF的,但谷歌并不太关心这个......;)

java.lang.ClassNotFoundException: org.apache.tomcat.PeriodicEventListener
当Eclipse WTP尝试发布Maven项目并运行它时,也可能会出现

。在依赖关系层次结构的某处,您应该找到一个tomcat库,即使其范围是providedtest

检查WTP-webapp的lib目录,注意那里的一堆tomcat-library。