reloader should survive SyntaxError

This commit is contained in:
wong2 2015-03-11 20:46:44 +08:00
parent 3bb4de4dff
commit d03891a470
2 changed files with 26 additions and 1 deletions

View File

@ -532,3 +532,15 @@ def warn(msg):
print("!!!\n", file=sys.stderr)
sys.stderr.flush()
def make_fail_app(msg):
def app(environ, start_response):
start_response("500 Internal Server Error", [
("Content-Type", "text/plain"),
("Content-Length", str(len(msg)))
])
return iter([msg])
return app

View File

@ -8,6 +8,7 @@ import os
import signal
import sys
import time
import traceback
from random import randint
@ -116,7 +117,19 @@ class Worker(object):
self.init_signals()
self.wsgi = self.app.wsgi()
try:
self.wsgi = self.app.wsgi()
except SyntaxError as e:
if not self.reloader:
raise
self.log.exception(e)
exc_type, exc_val, exc_tb = sys.exc_info()
self.reloader.add_extra_file(exc_val.filename)
tb_string = traceback.format_exc(exc_tb)
self.wsgi = util.make_fail_app(tb_string)
self.cfg.post_worker_init(self)