2010-05-27 5 views
14

Wenn ich einen HTTP-Statuscode 500 erhalte, möchte ich 2 verschiedene Seiten entsprechend der laufenden Umgebung anzeigen.Wie können Sie abhängig von der Umgebung einige URL-Mappings erstellen?

Im Entwicklungsmodus, ich möchte eine stackStrace Seite angezeigt werden (wie die Standard-Grails 500 Fehlerseite) und im Produktionsmodus, ich möchte eine formale „interne Fehler“ Seite angezeigt werden soll.

Ist es möglich und wie kann ich das tun?

Antwort

19

Sie können

Es ist nicht recht in UrlMappings.groovy

grails.util.GrailsUtil zur Rettung umgebungsspezifische Mappings tun, aber ich denke, es ist Ihr Problem lösen wird

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. Ich werde es versuchen und diesen Thread aktualisieren. Ist es nicht möglich, die if-Bedingung NUR für "500" -Mapping zu haben? – fabien7474

+0

Ja. Das obige ist nur ein Beispiel – tinny

+0

vielen Dank. Es klappt! – fabien7474

14

Es kann ein sauberer Weg, dies zu tun, aber ich mit Abbildung des Fehlercode an eine Steuerung und Handhabung der Logik dort hatte bekam:

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

und dann den entsprechenden Controller (Grails-app erstellen /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' 
     } 
    } 
} 

Sie müssen die entsprechenden GSPs in Grails-app/views/Fehler (accessDenied.gsp, notFound.gsp, etc.) und auch die neue schaffen Grails-App/Ansichten/FehlerProd.gsp. Durch die Weiterleitung an eine Controller-Methode für alle Fehlercodes erleichtern Sie es in Zukunft, den anderen Fehlercode-Handlern Logik hinzuzufügen.

+0

Thank you very viel Burt. – fabien7474

+1

Irgendwie funktioniert es nicht für 405. In meinem Fall funktioniert es für alle anderen Antwortcodes. –

Verwandte Themen