При получении кода состояния HTTP 500, я хочу отобразить 2 различных страницы согласно рабочей среде.
В режиме разработки я хочу отобразить stackStrace страницу (как ошибочная страница Grails 500 по умолчанию) и в производственном режиме, я хочу отобразить формальную "внутреннюю ошибку" страница.
Действительно ли возможно и как я могу сделать это?
В UrlMappings.groovy
grails.util.GrailsUtil
на помощь
Это некрасиво, но я думаю, что это решит вашу проблему
Например,
import grails.util.GrailsUtil
class UrlMappings {
static mappings = {
if(GrailsUtil.getEnvironment() == "development") {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/devIndex")
"500"(view:'/error')
}
if(GrailsUtil.getEnvironment() == "test") {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/testIndex")
"500"(view:'/error')
}
if(GrailsUtil.getEnvironment() == "production") {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/prodIndex")
"500"(view:'/error')
}
}
}
Может быть более чистый способ сделать это, но мне пришлось сопоставить код ошибки с контроллером и обработать там логику:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?" { constraints {} }
"/"(view:"/index")
"403"(controller: "errors", action: "accessDenied")
"404"(controller: "errors", action: "notFound")
"405"(controller: "errors", action: "notAllowed")
"500"(view: '/error')
}
}
, а затем создать соответствующий контроллер (grails -app / conf / controllers / ErrorsController.groovy):
import grails.util.Environment
class ErrorsController extends AbstractController {
def accessDenied = {}
def notFound = {}
def notAllowed = {}
def serverError = {
if (Environment.current == Environment.DEVELOPMENT) {
render view: '/error'
}
else {
render view: '/errorProd'
}
}
}
Вам нужно будет создать соответствующие GSP в grails-app / views / errors (accessDenied.gsp, notFound.gsp и т. д.), а также новый grails- приложение / просмотров / errorProd.gsp. Маршрутизация к методу контроллера для всех кодов ошибок упрощает добавление логики к другим обработчикам кодов ошибок в будущем.