Đối với cuộc sống của tôi, tôi không thể tìm ra nơi mà lỗi của tôi đến từ ứng dụng Flask của tôi khi tôi chạy qua gunicorn, vì tôi không thể tìm ra cách để hiển thị dấu vết ngăn xếp.Cách xem ngoại lệ trong ứng dụng Flask + gunicorn?
Ví dụ, giả sử tôi có một rất đơn giản "Hello, World!" ứng dụng được viết bằng Flask.
import logging
import os
from flask import Flask
app = Flask(__name__)
app.debug = True
@app.route('/')
def hello():
raise Exception('Exception raised!')
return 'Hello World!'
if __name__ == '__main__':
app.run()
Nếu tôi chạy này với python hello.py
, sau đó tất cả là tốt, khi tôi nhận được một vết đống rất hữu ích:
(venv)142:helloflask $ python hello.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader
127.0.0.1 - - [30/Jun/2014 18:52:42] "GET/HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/grautur/code/helloflask/hello.py", line 10, in hello
raise Exception('Exception raised!')
Exception: Exception raised!
Tuy nhiên, nếu tôi có thể tạo một Procfile với
web: gunicorn hello:app
và sau đó bắt đầu ứng dụng với foreman start -p 8000
, sau đó tôi không thấy gì cả. Chỉ là trang web "Lỗi Máy chủ Nội bộ".
$ foreman start -p 8000
18:56:10 web.1 | started with pid 36850
(...nothing else is ever displayed...)
Làm cách nào để ứng dụng Flask + gunicorn hiển thị các thông báo gỡ lỗi hữu ích hơn? Tôi đã thử thiết lập app.debug = True
(và nhiều lần lặp lại của chúng), vì nó có vẻ như các bài viết StackOverflow khác được đề xuất, nhưng dường như không thay đổi bất cứ điều gì.
Xin chào, bạn đã tìm thấy giải pháp chưa? – DavidLin
Gunicorn là đăng nhập để stderr theo mặc định và lý do duy nhất tôi có thể nghĩ rằng có thể giải thích những gì bạn thấy, là nếu gunicorn đăng nhập vào một tập tin (trong trường hợp bạn không nhận được gì trên stderr hoặc stdout). Bạn đã thử btw chưa? I E. để cấu hình gunicorn để đăng nhập vào các tập tin với 'web: gunicorn --error-logfile = hello-gunicorn.log --access-logfile = hello-gunicorn-access.log hello: app' và xem những gì được đăng nhập ở đó? – dimi