apt-get update
apt-get install -y python3-venv
python3 -m venv venv
./venv/bin/pip install gunicorn
FORCE=1 bin/start-nginx
./venv/bin/gunicorn -b unix:/tmp/nginx.socket app:app
# in another terminal (should hang for 15s assuming app is setup correctly)
curl localhost:5000
# in another terminal
# get the PID
ps aux | grep master
# should be graceful, that is nginx should shutdown after it finishes serving the request
kill -TERM $PID
FORCE=1 bin/start-nginx
# should kill nginx without waiting
# curl returns an error:
# curl: (52) Empty reply from server
kill -QUIT $PID
The app used by gunicorn was the hello world with a sleep thrown in
so we mimic a long running request.
import time
def app(environ, start_response):
time.sleep(15)
data = b"Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
After compiling nginx with the modifications:
I tested that the changes actually worked:
The
app
used bygunicorn
was the hello world with a sleep thrown in so we mimic a long running request.Based on https://github.com/heroku/heroku-buildpack-nginx/pull/56 https://admithubteam.atlassian.net/browse/AH-4919