2010-05-27 2 views
14

При получении кода состояния HTTP 500 я хочу отображать 2 разных страницы в соответствии с рабочей средой.Как сделать некоторые сопоставления URL-адресов в зависимости от среды?

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

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

ответ

19

Вы можете сделать окружающую среду конкретных сопоставлений в UrlMappings.groovy

grails.util.GrailsUtil на помощь

его не довольно, но я думаю, что это решит проблему

Eg

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

     } 
    } 
} 
+0

Thx. Я попробую и обновить эту тему. Невозможно ли использовать условие if только для отображения «500»? – fabien7474

+0

Да. Выше приведен пример – tinny

+0

Большое спасибо. Оно работает! – fabien7474

14

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

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-приложение /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' 
     } 
    } 
} 

Вам нужно создать соответствующие GSPS в Grails-приложение/просмотров/ошибок (accessDenied.gsp, notFound.gsp и т.д.), а также новый Grails-приложение/просмотров/errorProd.gsp. Путем маршрутизации к методу контроллера для всех кодов ошибок вы упростите добавление логики другим обработчикам кода ошибки в будущем.

+0

Спасибо очень много Берт. – fabien7474

+1

Как-то он не работает на 405. В моем случае он работает для всех остальных кодов ответов. –

 Смежные вопросы

  • Нет связанных вопросов^_^