Как сделать некоторые отображения URL в зависимости от среды?

При получении кода состояния HTTP 500, я хочу отобразить 2 различных страницы согласно рабочей среде.

В режиме разработки я хочу отобразить stackStrace страницу (как ошибочная страница Grails 500 по умолчанию) и в производственном режиме, я хочу отобразить формальную "внутреннюю ошибку" страница.

Действительно ли возможно и как я могу сделать это?

14
задан pnuts 19 November 2015 в 01:57
поделиться

2 ответа

В 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')

        }
    }
}
19
ответ дан 1 December 2019 в 08:15
поделиться

Может быть более чистый способ сделать это, но мне пришлось сопоставить код ошибки с контроллером и обработать там логику:

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. Маршрутизация к методу контроллера для всех кодов ошибок упрощает добавление логики к другим обработчикам кодов ошибок в будущем.

14
ответ дан 1 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: