0

非常に単純な grails アプリを作成し、Tomcat にプッシュしようとしました。

やった:

grails war

結果のwarファイルをtomcat/webappsディレクトリに配置して再起動しました。戦争の名前はec2.war. 打てlocalhost:8080ます。しかし、ヒットできません: localhost:8080\ec2-404エラーコードが表示されます。

catalina.out で次のスタックトレースを取得しています:

NFO: Deploying web application archive /var/lib/tomcat7/webapps/ec2.war
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: stacktrace.log (Permission denied)
        at java.io.FileOutputStream.openAppend(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:207)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
        at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
        at org.apache.log4j.spi.OptionHandler$activateOptions.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
        at org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.createFullstackTraceAppender(Log4jConfig.groovy:237)
        at org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.configure(Log4jConfig.groovy:201)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:226)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:64)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.initialize(Log4jConfig.groovy:70)
        at org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:48)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:679)

このエラーの原因と解決方法を教えてください。

tomcat は ec2 で実行され、ここでlocalhostは私のパブリック IP を参照していることに注意してください5.x.x.x.x

4

2 に答える 2

1

デフォルトでは、Grails アプリケーションはstacktrace.log、Tomcat の起動時に現在のディレクトリにあった名前のログ ファイルを作成しようとします。したがって、2つのオプションがあります

  1. 起動スクリプトに適切なものを入れて、起動するディレクトリを制御しcd、Tomcat が実行されているユーザー ID によってディレクトリが書き込み可能であることを確認します。
  2. grails の設定を変更して、stacktrace.log を別の場所に配置します (またはまったく作成しないようにします)。これは のlog4jクロージャーで行います。詳細については、ユーザー ガイドのロギング構成に関する章Config.groovyの「フル スタック トレース」セクションを参照してください。
于 2012-10-31T08:36:53.627 に答える
1

tomcat フォルダーの所有権を確認する必要があります。次のことを行います。

ls -lisa /var/lib/tomcat7/webapps/

そして所有権を確認します。実行したいだけの場合、おそらく最も簡単な方法は次のとおりです。

sudo chown -R root:root  /var/lib/tomcat
sudo chmod -R 777 /var/lib/tomcat

そして、

sudo /var/lib/tomcat/bin/startup.sh

しかし、これは最も安全な方法ではありません:)

于 2012-10-31T08:22:54.017 に答える