Add and use paste server selector. Yeah! Smart solutions!

This commit sponsored by Tryggvi Björgvinsson.  Thank you!
This commit is contained in:
Christopher Allan Webber 2014-10-09 18:24:14 -05:00
parent 9bf845d88f
commit 227a81b534
3 changed files with 35 additions and 1 deletions

View File

@ -290,3 +290,34 @@ def paste_app_factory(global_config, **app_config):
mgoblin_app = hook_transform('wrap_wsgi', mgoblin_app) mgoblin_app = hook_transform('wrap_wsgi', mgoblin_app)
return 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)

View File

@ -52,7 +52,7 @@ debug = false
# The server that is run by default. # The server that is run by default.
# By default, should only be accessable locally # By default, should only be accessable locally
[server:main] [server:main]
use = egg:gunicorn use = egg:mediagoblin#paste_server_selector
host = 127.0.0.1 host = 127.0.0.1
port = 6543 port = 6543
# Gunicorn settings. See http://docs.gunicorn.org/en/19.0/settings.html # Gunicorn settings. See http://docs.gunicorn.org/en/19.0/settings.html

View File

@ -123,6 +123,9 @@ try:
[paste.app_factory] [paste.app_factory]
app = mediagoblin.app:paste_app_factory app = mediagoblin.app:paste_app_factory
[paste.server_runner]
paste_server_selector = mediagoblin.app:paste_server_selector
[paste.filter_app_factory] [paste.filter_app_factory]
errors = mediagoblin.errormiddleware:mgoblin_error_middleware errors = mediagoblin.errormiddleware:mgoblin_error_middleware