在tomcat中托管grails应用程序

在tomcat中托管grails应用程序,tomcat,grails,amazon-web-services,Tomcat,Grails,Amazon Web Services,我做了一个非常简单的grails应用程序,并试图将其推送到我的tomcat上 我做到了: grails war 并将生成的war文件放入我的tomcat/webapps目录,然后重新启动它。战争被命名为ec2.war。我可以点击localhost:8080。但是我不能点击:localhost:8080\ec2-我得到一个404错误代码 我在catalina.out得到以下stacktrace: NFO: Deploying web application archive /var/lib/to

我做了一个非常简单的grails应用程序,并试图将其推送到我的tomcat上

我做到了:

grails war
并将生成的war文件放入我的tomcat/webapps目录,然后重新启动它。战争被命名为
ec2.war
。我可以点击
localhost:8080
。但是我不能点击:
localhost:8080\ec2
-我得到一个
404
错误代码

我在catalina.out得到以下stacktrace:

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)
NFO:部署web应用程序存档/var/lib/tomcat7/webapps/ec2.war
log4j:错误setFile(null,true)调用失败。
java.io.FileNotFoundException:stacktrace.log(权限被拒绝)
位于java.io.FileOutputStream.openAppend(本机方法)
位于java.io.FileOutputStream。(FileOutputStream.java:207)
位于java.io.FileOutputStream。(FileOutputStream.java:131)
位于org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
位于org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
位于org.apache.log4j.spi.OptionHandler$activateOptions.call(未知源)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
位于org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.createFullstackTraceAppender(Log4jConfig.groovy:237)
位于org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.configure(Log4jConfig.groovy:201)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:616)
位于org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:226)
位于org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:64)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
位于org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.initialize(Log4jConfig.groovy:70)
位于org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:48)
位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
位于org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
位于org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
在java.util.concurrent.FutureTask.run(FutureTask.java:166)中
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
运行(Thread.java:679)
导致此错误的原因是什么?如何解决


请注意,tomcat在ec2中运行,这里的
localhost
指的是我的公共IP,在
5.x.x.x
的情况下,您需要检查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

但这并不是最安全的方法:)

默认情况下,Grails应用程序尝试在tomcat启动时的当前目录中创建名为
stacktrace.log
的日志文件。所以你有两个选择

  • 通过在启动脚本中放入合适的
    cd
    ,控制它在哪个目录中启动,并确保目录可由tomcat运行的用户id写入,或
  • 将grails配置更改为将stacktrace.log放在其他地方(或者根本不创建它)。您可以在
    Config.groovy
    中的
    log4j
    闭包中执行此操作,有关详细信息,请参阅中的“完整堆栈跟踪”部分

  • Localhost:8080/ec2并检查logs/catalina.out是否有错误消息。@crudolf:我已经添加了stacktrace部分。不确定为什么会将其作为主题外关闭。Grails是一个编程框架,关于将其部署到tomcat,有很多问题。非常感谢,现在可以用了。