2

CloudFoundry で何ヶ月も実行されている Grails アプリがあります。アプリを Grails 2.0.4 から 2.1.0 に更新し、使用しているいくつかのプラグインも更新しました。

アプリを CloudFoundry にプッシュして開始すると、次のエラーが表示されます。

'appname' の状態は不明です。十分な情報がありません。

Tomcat Catalina のログには、以下の NoClassDefFoundError が表示されます。

Ivy キャッシュの問題について読みましたが、まだ調べていません。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
4

5 に答える 5

3

Grails 1.3.7 から 2.1.1 に移行するときにこの問題が発生しました。

WAR ファイルを解凍し、すべての tomcat-*.jar ファイル (いくつかの tomcat-embedded jar があります) を削除してから、Tomcat を再起動することで修正しました。

Tomcat 6 を実行していますが、それが問題なのだろうか? とにかく、私のアプリは今のところ動作していますが、これは最適なインストール手順ではありません!

于 2012-10-08T18:32:11.037 に答える
2

CloudFoundryを使用していませんが、Grails 2.1WARをTomcat6にデプロイするときに同じ問題が発生しました。今のところ、WAR生成の直前に_Events.groovy埋め込みtomcat-およびjarをWARステージング領域から削除するように構成しました。grails-plugin-tomcat-

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()チェックは不要な場合があります。)

これは今のところ機能していますが、回避策ではなく、実際の解決策を入手することをお勧めします。

于 2012-11-19T18:07:50.293 に答える
2

Grails 2.1.0 から 2.0.4 にロールバックして問題を解決しました。問題はここで説明されている問題である可能性があると思います。しかし、Graeme が提供した回避策は、cloudfoundry.com にデプロイする際の問題を解決しませんでした。

このアプリを Grails 2.1.0 でローカルに実行しても問題はありませんでしたが、cloudfoundry.com では動作しませんでした。

于 2012-08-26T18:24:21.270 に答える
1

春のアプリでも同じ問題がありました。サービスを再起動した後、~cloudfoundry/vcap/dev_setup/bin/vcap stop, cloudfoundry/vcap/dev_setup/bin/vcap start 問題なくアプリケーションをプッシュできました。より強力なマシンに CF をインストールすると役立つ場合があります。現在のハードウェアは何ですか?

于 2012-08-25T22:05:04.303 に答える