Прервано сопоставление URL для действий, отличных от индекса в автономном приложении WAR для Grails 3

Я новичок в GRAILS, но я создал простое приложение и пытаюсь развернуть его на Tomcat.

Если я запускаю приложение, используя:

grails prod run-app

все отлично работает Однако, если я соберу его в файл войны

grails prod war

затем либо загрузите пакет war на сервер Tomcat, либо запустите его прямо как

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

затем я получаю это странное поведение, когда все сначала кажется нормальным, но всякий раз, когда я нажимаю ссылку для действия, отличного от индекса, я получаю ошибку 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 обязательно должен быть найден, потому что он указан и связан с таблицей в индексе.

У меня огромное количество проблем, чтобы разобраться в этом, потому что я не могу найти какой-либо обратной связи от запущенного файла войны, запускаю ли я его в tomcat или напрямую, даже если я перемещаю среды в test или dev. Theres просто ничего в файлах журнала или stdout.

Вот мои 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" для любой среды.

Я ценю любую помощь. Благодарю.

2 ответа

Решение

Моя проблема была с Grails 3.2.1. После того, как я обновил до Grails 3.2.2, сделал чистку gradle, затем переупаковал, все работает отлично.

У меня та же проблема с Grails 3.2.2.

Не могу получить "/" для загрузки. Я использую пространства имен, поэтому мое отображение выглядит

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

с

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

Все работает правильно в любой среде с Grails Run-App, но когда я запускаю и запускаю, это выдает мне страницу с ошибкой.

Другие вопросы по тегам