diff --git a/gunicorn/util.py b/gunicorn/util.py index 3bbb92c3..7c9f7853 100644 --- a/gunicorn/util.py +++ b/gunicorn/util.py @@ -561,6 +561,7 @@ def warn(msg): def make_fail_app(msg): + msg = to_bytestring(msg) def app(environ, start_response): start_response("500 Internal Server Error", [ diff --git a/gunicorn/workers/base.py b/gunicorn/workers/base.py index a2ba218f..b4f24e6a 100644 --- a/gunicorn/workers/base.py +++ b/gunicorn/workers/base.py @@ -12,6 +12,7 @@ import sys import time import traceback +from gunicorn import six from gunicorn import util from gunicorn.workers.workertmp import WorkerTmp from gunicorn.reloader import preferred_reloader, Reloader, InotifyReloader @@ -155,8 +156,9 @@ class Worker(object): exc_type, exc_val, exc_tb = sys.exc_info() self.reloader.add_extra_file(exc_val.filename) - tb_string = traceback.format_tb(exc_tb) - self.wsgi = util.make_fail_app(tb_string) + tb_string = six.StringIO() + traceback.print_tb(exc_tb, file=tb_string) + self.wsgi = util.make_fail_app(tb_string.getvalue()) finally: del exc_tb