2012-01-22 27 views
6

Đối với dự án Google Appengine được viết bằng Python, tôi muốn có thông báo lỗi của riêng mình khi xảy ra lỗi. Tôi muốn sử dụng error_handlers như mô tả trong: http://code.google.com/intl/nl/appengine/docs/python/config/appconfig.html#Custom_Error_ResponsesCách tạo trang lỗi tùy chỉnh với app.yaml cho Google Appengine Python

Trong ứng dụng tôi sử dụng ứng dụng web với debug = False

Khi tôi tạo ra một lỗi trong mã của tôi, tôi nhận được tiêu chuẩn 500 Lỗi máy chủ nhắn từ trình duyệt .

Tôi đã tạo ra một trang lỗi tùy chỉnh tên default_error.html

Câu hỏi đặt ra là: ở đâu để lưu trang lỗi tùy chỉnh này?

BTW Đây là mã app.yaml tôi:

application: customerrorpage 
version: 1 
runtime: python 
api_version: 1 


error_handlers: 
- file: default_error.html 

handlers: 
- url: /good.htm 
    static_files: static/good.htm 
    upload: static/good.htm 

- url:/
    static_files: static/good.htm 
    upload: static/good.htm 

- url: /.* 
    script: main.py 

Trả lời

0

Một cách tiếp cận này là để xác định một lớp 'BaseRequestHandler', từ đó xử lý yêu cầu của bạn được subclassed. Lớp BaseRequestHandler có thể ghi đè phương thức handle_exception() (xem http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_handle_exception) để hiển thị trang lỗi.

+0

Mối quan hệ giữa lớp 'BaseRequestHandler' và việc sử dụng app.yaml là gì? – Hans

4

Xác định một tùy chỉnh 404 chỉ với phần python làm việc cho tôi:

app.error_handlers[404] = handle_404

def handle_404(request, response, exception): 
    c = {'exception': exception.status} 
    t = jinja2.get_jinja2(app=app).render_template('404.html', **c) 
    response.write(t) 
    response.set_status(exception.status_int) 

này cho phép bạn kiểm soát nhiều hơn các thông báo lỗi và động lực khác mà bạn có thể muốn hiển thị.

+2

Cảm ơn bạn đã đề xuất. Tuy nhiên tôi không cần phải xác định một trang lỗi 404 tùy chỉnh. Tôi sẽ đơn giản chấp nhận tất cả đầu vào và phản ứng với điều đó một cách gọn gàng. Đó là lý thuyết. Trong thực tế tôi có thể đã thực hiện một lỗi chương trình, do thực tế là tôi không có đủ thử nghiệm, hoặc dự án trở nên phổ biến mà một lỗi over_quota xảy ra. Giả định của tôi là tất cả các lỗi máy chủ (lỗi 500) và tất cả các lỗi máy chủ cụ thể khác của Appengine như over_quota đều có thể tùy chỉnh với app.yaml. Vì vậy, câu hỏi đặt ra là khi tôi muốn sử dụng yaml.app để xử lý loại lỗi này, tôi sẽ lưu trang lỗi tùy chỉnh của mình ở đâu? – Hans

+1

Đề xuất này đã giúp tôi biết rằng bạn có thể đã sử dụng webapp2 – Hans

0

Được tìm thấy một phần cách hoạt động. Cảm ơn tất cả các câu trả lời của bạn.

Vị trí của tệp HTM có thể nằm trong lõi hoặc trong một thư mục riêng biệt. Nếu đó là việc sử dụng trường hợp ví dụ đoạn mã sau vào tập tin app.yaml của bạn:

error_handlers: 
- file: error_handlers/default_error.html 

Các sẽ được hiển thị tập tin html bây giờ sẽ được đặt trong thư mục error_handlers

Khi bạn nhập một module nonexisting trong chính .py trang trên được hiển thị.

Để tìm lỗi 500 tôi đã sử dụng webapp2 để hiển thị trang lỗi tùy chỉnh. Trang này luôn được hiển thị khi có lỗi xảy ra. Ngay cả khi có lỗi over_quota và app.yaml được định cấu hình chính xác. Tôi cũng đã xóa webapp2 và sử dụng lại webapp. Bây giờ không có trang nào được hiển thị.

Tôi có một ứng dụng khác hiện đang vượt quá mức. Làm cách nào để hiển thị trang html over_quota? Nó là một lỗi?

+0

Bạn có thể thêm bộ lọc vào thuộc tính error_handlers của mình. Hơn hạn ngạch trông giống như "- error_code: over_quota". Bạn có thể thêm bộ lọc riêng cho hạn ngạch, bảo vệ và thời gian chờ của DoS - https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Custom_error_responses – Greg

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