2010-05-27 17 views
14

HTTP स्थिति कोड 500 प्राप्त करते समय, मैं चल रहे वातावरण के अनुसार 2 अलग-अलग पृष्ठों को प्रदर्शित करना चाहता हूं।पर्यावरण के आधार पर कुछ यूआरएल मैपिंग कैसे करें?

विकास मोड में, मैं एक stackStrace पेज प्रदर्शित करना चाहते हैं और उत्पादन मोड में (डिफ़ॉल्ट Grails 500 त्रुटि पृष्ठ की तरह), मैं एक औपचारिक "आंतरिक त्रुटि" पृष्ठ प्रदर्शित करना चाहते हैं।

क्या यह संभव है और मैं यह कैसे कर सकता हूं?

उत्तर

19

आप बचाव

इसकी सुंदर नहीं करने के लिए भीतर 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') 

     } 
    } 
} 
+0

Thx। मैं कोशिश करूँगा और इस धागे को अद्यतन करूंगा। क्या "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' 
     } 
    } 
} 

आप grails एप्लिकेशन के अंतर्गत/विचारों/त्रुटियों (accessDenied.gsp, notFound.gsp, आदि) और भी नए में इसी GSPs बनाने की आवश्यकता होगी grails एप्लिकेशन के अंतर्गत/विचारों/errorProd.gsp। सभी त्रुटि कोडों के लिए नियंत्रक विधि पर रूटिंग करके आप भविष्य में अन्य त्रुटि कोड हैंडलर में तर्क जोड़ना आसान बनाते हैं।

+0

तुम बहुत धन्यवाद बहुत बर्ट – fabien7474

+1

किसी भी तरह यह 405 के लिए काम नहीं करता है। मेरे मामले में यह अन्य सभी प्रतिक्रिया कोडों के लिए काम कर रहा है। –

संबंधित मुद्दे