URL 对于 Grails 3 应用程序独立 WAR 中除索引以外的操作映射中断

URL Mapping broken for actions other than index in standalone WAR for Grails 3 App

我是 GRAILS 的新手,但我构建了一个简单的应用程序并尝试将其部署到 tomcat。

如果我 运行 应用程序使用:

grails prod run-app

一切正常。但是,如果我将它构建为 war 文件

grails prod war

然后将 war 包上传到 tomcat 服务器或 运行 直接像

java -Dgrails.env=prod -jar build\lib\app.war

然后我得到这种奇怪的行为,一开始一切似乎都很好,但每当我点击 link 进行索引以外的操作时,我都会收到 404 错误。 例如。

     webapp:8080/employee           WORKS
     webapp:8080/employee/index     WORKS
     webapp:8080/employee/show/1    404 error
     webapp:8080/department         WORKS
     webapp:8080/department/show/1  404 error

等等

在上面的例子中 webapp:8080/employee/show/1 肯定能找到,因为它已被列出并且 link 从索引中的 table 编辑。

我在追根究底时遇到了很多麻烦,因为我似乎无法从 运行ning war 文件中找到任何反馈,无论我 运行 它在 tomcat 或直接,即使我将环境移动到测试或开发。日志文件或标准输出中什么也没有。

这是我的 UrlMappings

package generico

class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        // "/"(view:"/index")
        "/"(controller:"employee", action:"index")
        "500"(view:'/error')
        "404"(view:'/notFound')
    }
}

同样,如果我对任何环境执行"grails run-app",一切都绝对正常。

感谢任何帮助。谢谢。

我在使用 Grails 3.2.2 时遇到了同样的问题。

无法加载“/”。我正在使用命名空间,所以我的映射看起来像

"/"(namespace: 'corp', controller: 'index', action: 'index')

com.example.corp.IndexController {
  static namespace = 'corp'
  def index() {)
}

在使用 grails 运行-app 的任何环境中一切正常,但是当我 war 和 运行 时,它会给我一个错误页面。

我的问题出在 Grails 3.2.1 上。在我更新到 Grails 3.2.2 后,进行了 gradle 清理,然后重新打包,一切正常。