From b3724d60d2e50dd19e61140406aa85dff981ac16 Mon Sep 17 00:00:00 2001
From: Pjotr Prins
Date: Mon, 29 Jan 2018 14:15:49 +0000
Subject: startup script: adapting for gunicorn
---
wqflask/__init__.py | 1 -
wqflask/gunicorn/__init__.py | 0
wqflask/gunicorn/genenetwork2.py | 10 ++++++++++
wqflask/gunicorn/wsgi.py | 5 +++++
wqflask/runserver.py | 2 ++
5 files changed, 17 insertions(+), 1 deletion(-)
create mode 100644 wqflask/gunicorn/__init__.py
create mode 100644 wqflask/gunicorn/genenetwork2.py
create mode 100644 wqflask/gunicorn/wsgi.py
(limited to 'wqflask')
diff --git a/wqflask/__init__.py b/wqflask/__init__.py
index 315b709e..e69de29b 100644
--- a/wqflask/__init__.py
+++ b/wqflask/__init__.py
@@ -1 +0,0 @@
-from wqflask import app
diff --git a/wqflask/gunicorn/__init__.py b/wqflask/gunicorn/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/wqflask/gunicorn/genenetwork2.py b/wqflask/gunicorn/genenetwork2.py
new file mode 100644
index 00000000..afbdc934
--- /dev/null
+++ b/wqflask/gunicorn/genenetwork2.py
@@ -0,0 +1,10 @@
+from flask import Flask
+application = Flask(__name__)
+
+@application.route("/")
+def hello():
+ return "
Hello There!
"
+
+if __name__ == "__main__":
+ application.run(host='0.0.0.0')
+
diff --git a/wqflask/gunicorn/wsgi.py b/wqflask/gunicorn/wsgi.py
new file mode 100644
index 00000000..8c14ee6b
--- /dev/null
+++ b/wqflask/gunicorn/wsgi.py
@@ -0,0 +1,5 @@
+from genenetwork2 import application
+
+if __name__ == "__main__":
+ application.run()
+
diff --git a/wqflask/runserver.py b/wqflask/runserver.py
index 50f134db..e62e34f2 100644
--- a/wqflask/runserver.py
+++ b/wqflask/runserver.py
@@ -1,5 +1,7 @@
# Starts the webserver with the ./bin/genenetwork2 command
#
+# This uses Werkzeug WSGI, see gunicorn.py for the alternative
+#
# Please note, running with host set externally below combined with
# debug mode is a security risk unless you have a firewall setup, e.g.
#
--
cgit v1.2.3
From 85819dbeaf922456dc205e482e7e338952945d9b Mon Sep 17 00:00:00 2001
From: Pjotr Prins
Date: Mon, 29 Jan 2018 15:10:09 +0000
Subject: Gunicorn works
---
bin/genenetwork2 | 28 +++++++++++++++++++---------
etc/default_settings.py | 2 +-
wqflask/gunicorn/__init__.py | 0
wqflask/gunicorn/genenetwork2.py | 10 ----------
wqflask/gunicorn/wsgi.py | 5 -----
wqflask/run_gunicorn.py | 19 +++++++++++++++++++
wqflask/runserver.py | 2 +-
wqflask/wsgi.py | 4 ++++
8 files changed, 44 insertions(+), 26 deletions(-)
delete mode 100644 wqflask/gunicorn/__init__.py
delete mode 100644 wqflask/gunicorn/genenetwork2.py
delete mode 100644 wqflask/gunicorn/wsgi.py
create mode 100644 wqflask/run_gunicorn.py
create mode 100644 wqflask/wsgi.py
(limited to 'wqflask')
diff --git a/bin/genenetwork2 b/bin/genenetwork2
index f32c76eb..f6ae3807 100755
--- a/bin/genenetwork2
+++ b/bin/genenetwork2
@@ -31,7 +31,7 @@
#
# env GN2_PROFILE=~/opt/gn-latest-guix ./bin/genenetwork2 ./etc/default_settings.py -gunicorn "--bind 0.0.0.0:8000 --workers=2 --chdir wqflask/gunicorn/ wsgi"
-SCRIPT=$(readlink -f "$0")
+SCRIPT=$(realpath "$0")
GN2_BASE_DIR=$(dirname $(dirname "$SCRIPT"))
GN2_ID=$(cat /etc/hostname):$(basename $GN2_BASE_DIR)
@@ -50,15 +50,25 @@ else
fi
echo GN_VERSION=$GN_VERSION
+if [ "$1" = "-c" -o "$1" = "-gunicorn" ]; then
+ echo "Can not use $1 switch without default settings file"
+ exit 1
+fi
# Handle settings parameter (can be .py or .json)
-settings=$1
-ext="${settings##*.}"
-if [ -z "$settings" -o "$ext" = "json" -o "$ext" = "JSON" ]; then
- overrides=$settings
+settings=$(realpath "$1")
+if [ ! -e $settings ]; then
settings=$GN2_BASE_DIR/etc/default_settings.py
else
shift
fi
+
+ext="${settings##*.}"
+if [ "$ext" = "json" -o "$ext" = "JSON" ]; then
+ overrides=$settings
+else
+ echo $settings
+fi
+
if [ ! -e $settings ]; then
echo "ERROR: can not locate settings file - pass it in the command line"
exit 1
@@ -132,12 +142,12 @@ if [ "$1" = '-c' ] ; then
exit 0
fi
if [ "$1" = '-gunicorn' ] ; then
- cd $GN2_BASE_DIR
- cmd=${2}
+ cd $GN2_BASE_DIR/wqflask
+ cmd=$2
echo PYTHONPATH=$PYTHONPATH
- echo RUNNING COMMAND gunicorn $cmd
+ echo RUNNING gunicorn $cmd
gunicorn $cmd
- exit 0
+ exit $?
fi
echo "Starting the redis server:"
diff --git a/etc/default_settings.py b/etc/default_settings.py
index 59e22f1a..699d21f1 100644
--- a/etc/default_settings.py
+++ b/etc/default_settings.py
@@ -27,7 +27,7 @@ import sys
GN_VERSION = open("../etc/VERSION","r").read()
SQL_URI = "mysql://gn2:mysql_password@localhost/db_webqtl_s"
SQL_ALCHEMY_POOL_RECYCLE = 3600
-GN_SERVER_URL = "http://localhost:8880/"
+GN_SERVER_URL = "http://localhost:8880/" # REST API server
# ---- Flask configuration (see website)
TRAP_BAD_REQUEST_ERRORS = True
diff --git a/wqflask/gunicorn/__init__.py b/wqflask/gunicorn/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/wqflask/gunicorn/genenetwork2.py b/wqflask/gunicorn/genenetwork2.py
deleted file mode 100644
index afbdc934..00000000
--- a/wqflask/gunicorn/genenetwork2.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from flask import Flask
-application = Flask(__name__)
-
-@application.route("/")
-def hello():
- return "Hello There!
"
-
-if __name__ == "__main__":
- application.run(host='0.0.0.0')
-
diff --git a/wqflask/gunicorn/wsgi.py b/wqflask/gunicorn/wsgi.py
deleted file mode 100644
index 8c14ee6b..00000000
--- a/wqflask/gunicorn/wsgi.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from genenetwork2 import application
-
-if __name__ == "__main__":
- application.run()
-
diff --git a/wqflask/run_gunicorn.py b/wqflask/run_gunicorn.py
new file mode 100644
index 00000000..14a2d689
--- /dev/null
+++ b/wqflask/run_gunicorn.py
@@ -0,0 +1,19 @@
+# Run with gunicorn, see ./bin/genenetwork2 for an example
+#
+# Run standalone with
+#
+# ./bin/genenetwork2 ./etc/default_settings.py -c run_gunicorn.py
+
+# from flask import Flask
+# application = Flask(__name__)
+
+print "Starting up Gunicorn process"
+
+from wqflask import app
+
+@app.route("/gunicorn")
+def hello():
+ return "Hello There!
"
+
+if __name__ == "__main__":
+ app.run(host='0.0.0.0')
diff --git a/wqflask/runserver.py b/wqflask/runserver.py
index e62e34f2..a0c76e51 100644
--- a/wqflask/runserver.py
+++ b/wqflask/runserver.py
@@ -1,6 +1,6 @@
# Starts the webserver with the ./bin/genenetwork2 command
#
-# This uses Werkzeug WSGI, see gunicorn.py for the alternative
+# This uses Werkzeug WSGI, see ./run_gunicorn.py for the alternative
#
# Please note, running with host set externally below combined with
# debug mode is a security risk unless you have a firewall setup, e.g.
diff --git a/wqflask/wsgi.py b/wqflask/wsgi.py
new file mode 100644
index 00000000..be9c7b37
--- /dev/null
+++ b/wqflask/wsgi.py
@@ -0,0 +1,4 @@
+from run_gunicorn import app as application # expect application as a name
+
+if __name__ == "__main__":
+ application.run()
--
cgit v1.2.3
From f60d49527bedfc1ecda401f49fae9c9a5bbcf5f9 Mon Sep 17 00:00:00 2001
From: Pjotr Prins
Date: Tue, 30 Jan 2018 11:09:51 +0000
Subject: gunicorn dev and prod modes added
---
bin/genenetwork2 | 45 +++++++++++++++++++++++++++++++++++++--------
wqflask/wqflask/views.py | 2 +-
2 files changed, 38 insertions(+), 9 deletions(-)
(limited to 'wqflask')
diff --git a/bin/genenetwork2 b/bin/genenetwork2
index 6878643d..cbaba76f 100755
--- a/bin/genenetwork2
+++ b/bin/genenetwork2
@@ -27,9 +27,18 @@
#
# env GN2_PROFILE=~/opt/gn-latest-guix WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG ./bin/genenetwork2
#
-# For production we use gunicorn. Run with something like
+# For staging and production we use gunicorn. Run with something like
+# (note you have to provide the server port). Provide a settings file!
#
-# env GN2_PROFILE=~/opt/gn-latest-guix ./bin/genenetwork2 ./etc/default_settings.py -gunicorn "--bind 0.0.0.0:8000 --workers=1 wsgi"
+# env GN2_PROFILE=~/opt/gn-latest-guix SERVER_PORT=5003 ./bin/genenetwork2 ./etc/default_settings.py -gunicorn-prod
+#
+# For development use
+#
+# env GN2_PROFILE=~/opt/gn-latest-guix SERVER_PORT=5003 ./bin/genenetwork2 ./etc/default_settings.py -gunicorn-dev
+#
+# For extra flexibility you can also provide gunicorn parameters yourself with something like
+#
+# env GN2_PROFILE=~/opt/gn-latest-guix ./bin/genenetwork2 ./etc/default_settings.py -gunicorn "--bind 0.0.0.0:5003 --workers=1 wsgi"
SCRIPT=$(realpath "$0")
GN2_BASE_DIR=$(dirname $(dirname "$SCRIPT"))
@@ -55,11 +64,13 @@ if [ "$1" = "-c" -o "$1" = "-gunicorn" ]; then
exit 1
fi
# Handle settings parameter (can be .py or .json)
-settings=$(realpath "$1")
-if [ ! -e $settings ]; then
- settings=$GN2_BASE_DIR/etc/default_settings.py
-else
- shift
+if [ ! -z $1 ]; then
+ settings=$(realpath "$1")
+ if [ ! -e $settings ]; then
+ settings=$GN2_BASE_DIR/etc/default_settings.py
+ else
+ shift
+ fi
fi
ext="${settings##*.}"
@@ -139,7 +150,7 @@ if [ "$1" = '-c' ] ; then
echo PYTHONPATH=$PYTHONPATH
echo RUNNING COMMAND $cmd
python $cmd
- exit 0
+ exit $?
fi
if [ "$1" = '-gunicorn' ] ; then
cd $GN2_BASE_DIR/wqflask
@@ -149,6 +160,24 @@ if [ "$1" = '-gunicorn' ] ; then
gunicorn $cmd
exit $?
fi
+if [ "$1" = '-gunicorn-dev' ] ; then
+ cd $GN2_BASE_DIR/wqflask
+ echo PYTHONPATH=$PYTHONPATH
+ if [ -z $SERVER_PORT ]; then echo "ERROR: Provide a SERVER_PORT" ; exit 1 ; fi
+ cmd="--bind 0.0.0.0:$SERVER_PORT --workers=1 --reload wsgi"
+ echo RUNNING gunicorn $cmd
+ gunicorn $cmd
+ exit $?
+fi
+if [ "$1" = '-gunicorn-prod' ] ; then
+ cd $GN2_BASE_DIR/wqflask
+ echo PYTHONPATH=$PYTHONPATH
+ if [ -z $SERVER_PORT ]; then echo "ERROR: Provide a SERVER_PORT" ; exit 1 ; fi
+ cmd="--bind 0.0.0.0:$SERVER_PORT --workers=32 --max-requests 1000 --timeout 1200 wsgi"
+ echo RUNNING gunicorn $cmd
+ gunicorn $cmd
+ exit $?
+fi
echo "Starting the redis server:"
echo -n "dir $TMPDIR
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index d8f5616d..4e81c29c 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -766,7 +766,7 @@ def corr_scatter_plot_page():
def submit_bnw():
logger.error(request.url)
template_vars = get_bnw_input(request.form)
- return render_template("empty_collection.html", **{'tool':'Correlation Matrix'})
+ return render_template("empty_collection.html", **{'tool':'Correlation Matrix'})
# Todo: Can we simplify this? -Sam
def sharing_info_page():
--
cgit v1.2.3