Tomcat 应用程序上下文信息有时在g:link中不可用

Tomcat 应用程序上下文信息有时在g:link中不可用,tomcat,grails,Tomcat,Grails,我们的应用程序安装在许多系统上:有开发人员箱、开发集成系统、QA系统、登台系统、演示系统和生产系统。几个月来,这些系统中的任何一个都在其URL中丢失了应用程序上下文,这一直困扰着我们。例如,URL的格式不是qasys1.company.com/appName/dashboard,而是qasys1.company.com/dashboard,结果是404 appName只是不再显示在URL中。它与特定的代码更改无关,因为相同的应用程序版本可以在一个系统而不是另一个系统上显示问题。它似乎与特定的系统

我们的应用程序安装在许多系统上:有开发人员箱、开发集成系统、QA系统、登台系统、演示系统和生产系统。几个月来,这些系统中的任何一个都在其URL中丢失了应用程序上下文,这一直困扰着我们。例如,URL的格式不是
qasys1.company.com/appName/dashboard
,而是
qasys1.company.com/dashboard
,结果是404

appName
只是不再显示在URL中。它与特定的代码更改无关,因为相同的应用程序版本可以在一个系统而不是另一个系统上显示问题。它似乎与特定的系统无关。我相信他们都在某个时候展示过这个问题

以下是我所知道的,任何关于去哪里寻找或问题可能是什么的建议都将不胜感激:

问题发生在
g:link
标记中。有时它包括应用程序上下文,有时不包括

问题似乎发生在应用程序启动时。有时系统会启动并显示应用程序上下文,有时则不会

对于所有这些系统,我们在server.xml中使用具有以下定义的tomcat 7:

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

我们确实在配置文件中定义了
grails.app.context
,但这似乎并不能解决问题。我已经读到,
grails.app.context
实际上只在带有嵌入式tomcat的开发人员系统上使用。因此,没有任何影响对我们来说是有意义的:所有这些系统都是在生产环境中建立的

由于Spring的问题,我们没有定义
grails.serverUrl
。然而,我已经读到,
grails.serverUrl
仅用于重定向,我们的重定向没有问题

我们正在使用Grails2.2.4


我们在不同的浏览器中获得不同的效果。例如,如果我们使用Firefox,URL可能缺少应用程序上下文,但如果请求是在Chrome中发出的,则不会。(但这种情况没有足够的一致性,不能说它是一个特定的浏览器或浏览器版本。)

我认为解决这个问题的一个良好开端是确定问题是在Grails还是Tomcat中。任何简单的方法都是使用一个不同的servlet容器,可能是一个更简单的容器,比如Jetty Runner:您可以使用如下特定的上下文路径运行应用程序:
java-jar Jetty-Runner.jar--port 8080--path/appName someApp.war
我认为解决这个问题的一个好的开始是确定问题是在Grails还是Tomcat中。要做到这一点,任何简单的方法都是使用不同的servlet容器,可能是一个更简单的容器,比如Jetty Runner:您可以使用如下特定的上下文路径运行应用程序:
java-jar Jetty-Runner.jar--port 8080--path/appName someApp.war