2012-04-28 33 views
29

Tôi gọi app.run(debug=True) trong tệp bình của tôi.Flask debug = True không hoạt động khi đi qua uWSGI

và tôi có nó được triển khai với uWSGI và nginx (Tôi theo these instructions)

uwsgi -s /tmp/uwsgi.sock -w flask_file_name:app -H /path/to/virtual/env --chmod-socket 666 

Nhưng khi tôi nhận được một lỗi, tôi không nhận được bất kỳ thông tin gỡ lỗi trong trình duyệt hoặc trong nhật ký uWSGI.

Bất kỳ ý tưởng nào?

flask_file_name.py:

from flask import Flask, make_response, Response, jsonify 
import json 

app = Flask(__name__) 
app.debug = True 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == '__main__': 
    app.run() 
+0

Bạn có thể đăng 'flask_file_name.py' không? –

Trả lời

23

Theo the Flask mailing list bạn không thể sử dụng tùy chọn gỡ lỗi Flask với uWSGI, bởi vì nó không được sử dụng trong một môi trường forking.

Bạn thấy 502 vì bình/Werkzeug không gửi bất kỳ dữ liệu đến các máy chủ web, ý chí để nginx trả về một 502.

Bạn có thể bắt chước các trình gỡ lỗi sử dụng Bạn hãy bắt-ngoại lệ tùy chọn trong uWSGI (nhưng xin vui lòng không làm điều đó trong sản xuất)

Vì vậy, lý do bạn thấy 502s là vì lý do đó. Sửa chữa sẽ là thêm --catch-exceptions vào uWSGI khi thực thi.

+0

Bạn là người đàn ông! Nó vẫn không được định dạng như nó không có uWSGI, nhưng bây giờ tôi đã gặp lỗi. Cám ơn rất nhiều! – Flaviu

+0

Có, nhưng cũng thấy chú thích của gonz, bên dưới. :) –

19

Vấn đề là uwsgi không gọi app.run(). Nó gọi app(). Vì vậy, thay vào đó bạn có thể làm điều này:

from flask import Flask 
app = Flask(__name__) 
app.debug = True 
+1

Cảm ơn. Những sự giúp đỡ đó. Bây giờ nếu tôi có lỗi cú pháp, nó sẽ chuyển hướng đến trang lỗi nginx tĩnh 50x.html. Tôi có thể lấy bình để xử lý như thế nào? – Flaviu

25

Câu hỏi này là cũ, nhưng tôi sẽ đăng bài này để tham khảo trong tương lai ...

Nếu bạn muốn để có được những trang lỗi Werkzeug để làm việc với uwsgi, hãy thử sử dụng DebuggedApplication middleware Werkzeug của:

from werkzeug.debug import DebuggedApplication 
app.wsgi_app = DebuggedApplication(app.wsgi_app, True) 

Điều đó cần thực hiện thủ thuật nhưng KHÔNG QUÊN để làm điều này CHỈ trong môi trường phát triển.

+4

Điều này làm việc cho tôi, các câu trả lời khác thì không. Cảm ơn. –

+2

Để làm cho lời nhắc trình gỡ rối hoạt động, bạn phải sử dụng một nhân viên đơn lẻ trong uwsgi (- Workers 1, --threads 4) – GaretJax

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