2013-11-26 34 views
0

每當我的應用程序服務器和我的數據庫服務器之間連接出現問題時,就會引發500個「未知的MySQL服務器主機」錯誤。我有這些問題的特點,並希望將500更改爲502錯誤網關錯誤。 500的堆棧跟蹤當然不會通過我自己的任何代碼。什麼是最清楚的地方來捕捉和重新表徵這個服務器連接錯誤?Tastypie:將Django 500「未知MySQL服務器主機」轉換爲502 Bad Gateway?

回答

1

django middleware

你包裹在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): 
    .... 
+0

這看起來很好的建議,可能回答這個問題,因爲我問它(我從哪裏來給予好評!);我已經澄清說,我的應用程序是一個tastypie API而不是django視圖。我嘗試使用process_response而不是process_view來應用中間件解決方案,並且沒有運氣(process_response未激發)。 – Dave

相關問題