2011-07-28 32 views
8

Tôi muốn nắm bắt và xử lý DeadlineExceededError để người dùng không thấy trang "Lỗi máy chủ" chuẩn mà App Engine ném theo mặc định.Tôi làm cách nào để thiết lập trình xử lý DeadlineExceededError toàn cầu?

Tôi biết rằng DeadlineExceededErrors là not caught when overriding handle_exception trong trình xử lý yêu cầu của bạn (chúng tôi đã thực hiện việc này).

Tôi đã cố gắng, nhưng không thành công cho đến nay, để sử dụng custom error_handlers app.yaml configuration như vậy:

error_handlers: 
    - error_code: timeout 
    file: timeout.html 

... nhưng điều đó cũng không có vẻ để bắt DeadlineExceededErrors, trừ khi tôi đang làm gì đó sai.

Tôi biết rằng tôi có thể sử dụng mẫu sau để bắt DeadlineExceededErrors bên xử lý theo yêu cầu cụ thể:

class MainPage(webapp.RequestHandler): 
    def get(self): 
     try: 
      # Do stuff... 
     except DeadlineExceededError: 
      # Many Whelps! Handle it! 

... nhưng tôi muốn tránh thêm này đến từng xử lý yêu cầu duy nhất trong ứng dụng của tôi.

Làm thế nào tôi có thể bắt được những kẻ hút khó nắm bắt trên toàn cầu?

Trả lời

3

Một giải pháp có thể là sử dụng webapp2, một khung công cụ khá gọn gàng như hiện tại và có rất nhiều nội dung hữu ích trên webapp ban đầu. Với webapp2, bạn có thể xử lý ngoại lệ trong phương thức handle_500, như sau:

def BaseHandler(webapp2.RequestHandler): 
    def handle_500(request, response, exception): 
     if isinstance(exception, DeadlineExceededError): 
      response.write('Deadline exceeded!') 
     else: 
      response.write('A server error occurred!') 

     logging.exception(exception) 
     response.set_status(500) 
+0

Trong webapp2, bạn có thể đặt trình xử lý lỗi để xử lý mã trạng thái 500 - chủ yếu được sử dụng cho các trường hợp ngoại lệ chưa thực hiện. Ở đó, kiểm tra loại ngoại lệ và xử lý tương ứng: nếu isinstance (ngoại lệ, DeadlineExceededError): ... Tài liệu ở đây: http://webapp-improved.appspot.com/guide/exceptions.html#exceptions-in- the-wsgi-app – moraes

+0

Tôi thực sự không biết điều đó; có, đó sẽ là một nơi thích hợp hơn để xử lý lỗi. –

+1

Đây là những gì tôi đề nghị. Tuy nhiên, vui lòng không gửi các lỗi chuyển hướng - phân phát trang lỗi trên cùng một URL. –

Các vấn đề liên quan