2010-05-27 11 views
14

Al obtener un código de estado HTTP 500, quiero mostrar 2 páginas diferentes de acuerdo con el entorno en ejecución.¿Cómo hacer algunas asignaciones de URL dependiendo del entorno?

En el modo de desarrollo, quiero mostrar una página stackStrace (como el 500 Griales página de error por defecto) y en modo de producción, quiero mostrar una página formales "error interno".

¿Es posible y cómo puedo hacer eso?

Respuesta

19

Puede hacerlo ambiente asignaciones específicas dentro UrlMappings.groovy

grails.util.GrailsUtil al rescate

No es bastante, pero creo que va a resolver su problema

Ej

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. Lo intentaré y actualizaré este hilo. ¿No es posible tener la condición if SÓLO para el mapeo "500"? – fabien7474

+0

Sí. Lo anterior es solo un ejemplo – tinny

+0

muchas gracias. ¡Funciona! – fabien7474

14

Puede haber una forma más limpia de hacer esto, pero yo había conseguido con la cartografía del código de error a un controlador y gastos de la lógica que hay:

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

y luego crear el controlador correspondiente (griales aplicación /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' 
     } 
    } 
} 

tendrá que crear las GSP correspondientes en Grails-app/views/errores (accessDenied.gsp, notFound.gsp, etc.) y también el nuevo grails-app/views/errorProd.gsp. Al enrutar a un método de controlador para todos los códigos de error, es más fácil agregar lógica a los otros manejadores de código de error en el futuro.

+0

Muchas gracias mucho Burt. – fabien7474

+1

De alguna manera no funciona para 405. En mi caso, funciona para todos los demás códigos de respuesta. –

Cuestiones relacionadas