HTTP ステータスコード 500 を取得した際に、実行環境に合わせて 2 つの異なるページを表示したい。
開発モードでは、stackStrace ページ (デフォルトの Grails 500 エラー ページなど)を表示し、プロダクション モードでは、正式な「内部エラー」ページを表示したいと考えています。
それは可能ですか、どうすればそれを行うことができますか?
HTTP ステータスコード 500 を取得した際に、実行環境に合わせて 2 つの異なるページを表示したい。
開発モードでは、stackStrace ページ (デフォルトの Grails 500 エラー ページなど)を表示し、プロダクション モードでは、正式な「内部エラー」ページを表示したいと考えています。
それは可能ですか、どうすればそれを行うことができますか?
内で環境固有のマッピングを行うことができます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')
}
}
}
これを行うためのよりクリーンな方法があるかもしれませんが、エラーコードをコントローラーにマッピングし、そこでロジックを処理することにしました:
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 も作成する必要があります。すべてのエラー コードをコントローラー メソッドにルーティングすることで、後でロジックを他のエラー コード ハンドラーに簡単に追加できるようになります。