From 15c518f0f1a299b93676ea4e5d9d9de8a62c32c2 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Fri, 20 Dec 2019 11:32:02 +0530 Subject: [PATCH] Use cheroot as default production server for pgAdmin4. Fixes #5017 If DEBUG is true then we used the default flask server. --- docs/en_US/release_notes_4_17.rst | 1 + requirements.txt | 1 + web/pgAdmin4.py | 35 ++++++++++++++++++++++--------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/docs/en_US/release_notes_4_17.rst b/docs/en_US/release_notes_4_17.rst index 4a716480a..38dcb6e5f 100644 --- a/docs/en_US/release_notes_4_17.rst +++ b/docs/en_US/release_notes_4_17.rst @@ -14,6 +14,7 @@ New features Housekeeping ************ +| `Issue #5017 `_ - Use cheroot as default production server for pgAdmin4. Bug fixes ********* diff --git a/requirements.txt b/requirements.txt index dae5436d6..b2e00d610 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,6 +15,7 @@ # ignored when building a PIP Wheel. ############################################################################## blinker==1.4 +cheroot==8.2.1 Flask==1.0.2 Werkzeug>=0.15.0 Flask-Gravatar==0.5.0 diff --git a/web/pgAdmin4.py b/web/pgAdmin4.py index 71eaed5e1..5cfd61253 100644 --- a/web/pgAdmin4.py +++ b/web/pgAdmin4.py @@ -13,6 +13,7 @@ to start a web server.""" import os import sys +from cheroot.wsgi import Server as CherootServer if sys.version_info[0] >= 3: import builtins @@ -190,15 +191,29 @@ if __name__ == '__main__': # Reference: # https://github.com/pallets/werkzeug/issues/220#issuecomment-11176538 try: - app.run( - host=config.DEFAULT_SERVER, - port=server_port, - use_reloader=( - (not PGADMIN_RUNTIME) and app.debug and - os.environ.get("WERKZEUG_RUN_MAIN") is not None - ), - threaded=config.THREADED_MODE - ) - + if config.DEBUG: + app.run( + host=config.DEFAULT_SERVER, + port=server_port, + use_reloader=( + (not PGADMIN_RUNTIME) and app.debug and + os.environ.get("WERKZEUG_RUN_MAIN") is not None + ), + threaded=config.THREADED_MODE + ) + else: + # Can use cheroot instead of flask dev server when not in debug + # 10 is default thread count in CherootServer + num_threads = 10 if config.THREADED_MODE else 1 + prod_server = CherootServer( + (config.DEFAULT_SERVER, server_port), + wsgi_app=app, + numthreads=num_threads, + server_name=config.APP_NAME) + try: + print("Using production server...") + prod_server.start() + except KeyboardInterrupt: + prod_server.stop() except IOError: app.logger.error("Error starting the app server: %s", sys.exc_info())