0
每當我的應用程序服務器和我的數據庫服務器之間連接出現問題時,就會引發500個「未知的MySQL服務器主機」錯誤。我有這些問題的特點,並希望將500更改爲502錯誤網關錯誤。 500的堆棧跟蹤當然不會通過我自己的任何代碼。什麼是最清楚的地方來捕捉和重新表徵這個服務器連接錯誤?Tastypie:將Django 500「未知MySQL服務器主機」轉換爲502 Bad Gateway?
每當我的應用程序服務器和我的數據庫服務器之間連接出現問題時,就會引發500個「未知的MySQL服務器主機」錯誤。我有這些問題的特點,並希望將500更改爲502錯誤網關錯誤。 500的堆棧跟蹤當然不會通過我自己的任何代碼。什麼是最清楚的地方來捕捉和重新表徵這個服務器連接錯誤?Tastypie:將Django 500「未知MySQL服務器主機」轉換爲502 Bad Gateway?
你包裹在Django應用程序和捕捉分貝例外
class DbExceptCatcherMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
def catcher(view_func, view_args, view_kwargs):
def f(view_args, view_kwargs):
try:
return view_func(*view_args, **view_kwargs)
except DatabaseError:
raise HttpResponse(content='Unknown MySQL server host', status=502)
return f
view_func = catcher(view_func, view_args, view_kwargs)
所有視圖settings.py
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'path.to.module.DbExceptCatcherMiddleware',
)
這可能會幫助,但我不知道的。我不測試這個代碼。
或者你可以使用裝飾
def wrapp_excep(func):
def f(*arg, **kwd):
try:
return func(*arg, **kwd)
except DatabaseError:
raise HttpResponse(content='Unknown MySQL server host', status=502)
return f
@wrapp_excep
def your_view_1(request):
....
@wrapp_excep
def your_view_2(request):
....
這看起來很好的建議,可能回答這個問題,因爲我問它(我從哪裏來給予好評!);我已經澄清說,我的應用程序是一個tastypie API而不是django視圖。我嘗試使用process_response而不是process_view來應用中間件解決方案,並且沒有運氣(process_response未激發)。 – Dave