Merge pull request #994 from wong2/reloader

reloader should survive SyntaxError
This commit is contained in:
Benoit Chesneau 2015-03-18 13:59:45 +01:00
commit 83be046304
2 changed files with 30 additions and 2 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 [msg]
return app

View File

@ -8,6 +8,7 @@ import os
import signal
import sys
import time
import traceback
from random import randint
@ -116,14 +117,29 @@ class Worker(object):
self.init_signals()
self.wsgi = self.app.wsgi()
self.cfg.post_worker_init(self)
self.load_wsgi()
# Enter main run loop
self.booted = True
self.run()
def load_wsgi(self):
try:
self.wsgi = self.app.wsgi()
except SyntaxError as e:
if not self.cfg.reload:
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)
def init_signals(self):
# reset signaling
[signal.signal(s, signal.SIG_DFL) for s in self.SIGNALS]