From ae721f00d0a70f5eff0e69afc2636458ec548e19 Mon Sep 17 00:00:00 2001 From: Benoit Chesneau Date: Fri, 16 Jul 2010 12:49:23 +0200 Subject: [PATCH] fix SERVER_PROTOCOL in WSGI environ and fix gevent one. --- gunicorn/http/wsgi.py | 2 +- gunicorn/workers/ggevent.py | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/gunicorn/http/wsgi.py b/gunicorn/http/wsgi.py index 913ca309..ac188991 100644 --- a/gunicorn/http/wsgi.py +++ b/gunicorn/http/wsgi.py @@ -98,7 +98,7 @@ def create(req, sock, client, server, cfg): "REMOTE_PORT": str(remote[1]), "SERVER_NAME": server[0], "SERVER_PORT": str(server[1]), - "SERVER_PROTOCOL": req.version + "SERVER_PROTOCOL": "HTTP/%s" % ".".join(map(str, req.version)) } for key, value in req.headers: diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index dd27cf29..688d3b1c 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -103,17 +103,15 @@ class GeventBaseWorker(Worker): @classmethod def setup(cls): from gevent import monkey - monkey.patch_all(dns=False) + monkey.patch_all() def run(self): self.socket.setblocking(1) - pool = Pool(self.worker_connections) - + pool = Pool(self.worker_connections) + self.server_class.base_env['wsgi.multiprocess'] = (self.cfg.workers > 1) server = self.server_class(self.socket, application=self.wsgi, spawn=pool, handler_class=self.wsgi_handler) - server.start() - try: while self.alive: self.notify() @@ -131,6 +129,12 @@ class GeventBaseWorker(Worker): class WSGIHandler(wsgi.WSGIHandler): def log_request(self, *args): pass + + def prepare_env(self): + env = super(WSGIHandler, self).prepare_env() + env['RAW_URI'] = self.request.uri + return env + class WSGIServer(wsgi.WSGIServer): base_env = BASE_WSGI_ENV @@ -144,6 +148,12 @@ class GeventWSGIWorker(GeventBaseWorker): class PyWSGIHandler(pywsgi.WSGIHandler): def log_request(self, *args): pass + + def get_environ(self): + env = super(PyWSGIHandler, self).get_environ() + env['gunicorn.sock'] = self.socket + env['RAW_URI'] = self.path + return env class PyWSGIServer(pywsgi.WSGIServer): base_env = BASE_WSGI_ENV