14

HTTP ステータスコード 500 を取得した際に、実行環境に合わせて 2 つの異なるページを表示したい。

開発モードでは、stackStrace ページ (デフォルトの Grails 500 エラー ページなど)を表示し、プロダクション モードでは、正式な「内部エラー」ページを表示したいと考えています。

それは可能ですか、どうすればそれを行うことができますか?

4

2 に答える 2

20

内で環境固有のマッピングを行うことができます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')

        }
    }
}
于 2010-05-27T21:24:32.773 に答える
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-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'
      }
   }
}

grails-app/views/errors (accessDenied.gsp、notFound.gsp など) に対応する GSP を作成し、新しい grails-app/views/errorProd.gsp も作成する必要があります。すべてのエラー コードをコントローラー メソッドにルーティングすることで、後でロジックを他のエラー コード ハンドラーに簡単に追加できるようになります。

于 2010-05-27T20:51:22.013 に答える