3

我们有一些应用程序部署到同一个 tomcat 服务器上(目前正在升级到 grails 3,所以这可能是未来几个月的 OBE,但它已经困扰我们很长时间了)并且其中两个应用程序偶尔会失去它们的相对上下文根路径。

假设我们有“app1”和“app2”部署到server:port/app1server:port/app2

app1 工作得很好,但 app2 有时(大约 20% 的时间,可能)会部署,并且所有<g:link/>链接(或任何其他生成的链接,例如资产位置)相对于服务器根目录生成......应用程序正确部署在/app2,因此链接指向错误的位置。

例如,<g:link controller='hello' action='index'/>将生成链接/hello/index而不是/app2/hello/index.

我不知道要发布的相关代码是什么,我们已经将它与我们的其他应用程序进行了比较,并且在表现出这种行为的两个应用程序中没有发现任何明显的不同。但只有这两个(十几个)应用程序会以这种方式中断。

任何关于可能导致此问题或在哪里查看的想法将不胜感激。

编辑:正在使用的插件:

compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.grails:grails-core"
compile "org.springframework.boot:spring-boot-starter-actuator"
provided "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-dependencies"
compile "org.grails:grails-web-boot"
compile 'org.grails.plugins:cache:4.0.0.M2'
compile 'org.grails.plugins:cache-ehcache:3.0.0.M1'
compile "org.grails.plugins:scaffolding"
compile "org.grails.plugins:hibernate4"
compile "org.hibernate:hibernate-core:4.3.10.Final"
compile "org.hibernate:hibernate-ehcache:4.3.10.Final"
console "org.grails:grails-console"
profile "org.grails.profiles:web"
runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.14.1"
runtime "com.h2database:h2"
testCompile "org.grails:grails-plugin-testing"
testCompile "org.grails.plugins:geb"
testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"
4

1 回答 1

1

解决了('ish)

我们终于找到了造成这种情况的原因。grailsLinkGeneratorDefaultLinkGenerator类)要么丢失,要么contextPath在启动时未正确设置。这会导致使用链接生成器单例生成的所有链接(这是大多数,但显然不是全部)在服务器根目录生成。

我们仍在努力确定是否可以运行BootStrap并推迟到服务器启动完成,但目前,作为一种解决方法,我们添加了一个不受保护的控制器操作来重置它,这似乎可以解决问题(直到下次重新启动服务器)。

def resetContextPath() {
  grailsLinkGenerator.contextPath = grailsApplication.config.getProperty("server.contextPath")

  if (grailsLinkGenerator instanceof CachingLinkGenerator) {
    grailsLinkGenerator.clearCache()
  }
}

仍然不知道为什么它只发生在某些服务器上的某些应用程序上(可能是应用程序启动的时间),但这至少让我们无需重启即可解决问题。

于 2018-08-23T11:14:59.930 回答