diff options
-rw-r--r-- | mediagoblin/app.py | 31 | ||||
-rw-r--r-- | paste.py3.ini | 2 | ||||
-rw-r--r-- | setup.py | 3 |
3 files changed, 35 insertions, 1 deletions
diff --git a/mediagoblin/app.py b/mediagoblin/app.py index b3e41835..9014bf47 100644 --- a/mediagoblin/app.py +++ b/mediagoblin/app.py @@ -290,3 +290,34 @@ def paste_app_factory(global_config, **app_config): mgoblin_app = hook_transform('wrap_wsgi', mgoblin_app) return mgoblin_app + + +def paste_server_selector(wsgi_app, global_config=None, **app_config): + """ + Select between gunicorn and paste depending on what ia available + """ + # See if we can import the gunicorn server... + # otherwise we'll use the paste server + try: + import gunicorn + except ImportError: + gunicorn = None + + if gunicorn is None: + # use paste + from paste.httpserver import server_runner + + cleaned_app_config = dict( + [(key, app_config[key]) + for key in app_config + if key in ["host", "port", "handler", "ssl_pem", "ssl_context", + "server_version", "protocol_version", "start_loop", + "daemon_threads", "socket_timeout", "use_threadpool", + "threadpool_workers", "threadpool_options", + "request_queue_size"]]) + + return server_runner(wsgi_app, global_config, **cleaned_app_config) + else: + # use gunicorn + from gunicorn.app.pasterapp import PasterServerApplication + return PasterServerApplication(wsgi_app, global_config, **app_config) diff --git a/paste.py3.ini b/paste.py3.ini index afd5982b..77364c09 100644 --- a/paste.py3.ini +++ b/paste.py3.ini @@ -52,7 +52,7 @@ debug = false # The server that is run by default. # By default, should only be accessable locally [server:main] -use = egg:gunicorn +use = egg:mediagoblin#paste_server_selector host = 127.0.0.1 port = 6543 # Gunicorn settings. See http://docs.gunicorn.org/en/19.0/settings.html @@ -123,6 +123,9 @@ try: [paste.app_factory] app = mediagoblin.app:paste_app_factory + [paste.server_runner] + paste_server_selector = mediagoblin.app:paste_server_selector + [paste.filter_app_factory] errors = mediagoblin.errormiddleware:mgoblin_error_middleware |