Мой код лежит в /home/ubuntu/api
на удаленном сервере. Объект WSGI называется app
и присутствует в /home/ubuntu/api/api.py
. Мой файл конфигурации gunicorn называется gunicorn.conf.py
и присутствует в /home/ubuntu/api
my gunicorn.conf.py
import multiprocessing
bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 2048
worker_class = 'gevent'
daemon = True
debug = True
loglevel = 'debug'
accesslog = '/mnt/log/gunicorn_access.log'
errorlog = '/mnt/log/gunicorn_error.log'
max_requests = 1000
graceful_timeout = 20
Я пытаюсь запустить gunicorn на сервере удаленно через ткань. Мой код ткани выглядит так
@roles('stag_api')
def run_server():
with cd('/home/ubuntu/api'):
sudo('gunicorn -c gunicorn.conf.py api:app')
Теперь ткань не показывает никаких ошибок, но ганикорн не запускается.
Поэтому я создал __init__.py
в /home/ubuntu/api
, чтобы сделать его пакетом. Я написал это в файле __init__.py
from api import app
Это делает WSGI app
доступным в пространстве имен пакета. Затем я изменил свой код ткани на этот
@roles('stag_api')
def run_server():
sudo('gunicorn -c /home/ubuntu/api/gunicorn.conf.py api:app')
Даже сейчас ткань не показывает никакой ошибки, но ганикорн не запускается.
Итак, я создал сценарий оболочки с именем server
, и его код выглядит так:
if [ "$1" = "start" ]; then
echo 'starting'
gunicorn -c /home/ubuntu/api/gunicorn.conf.py api:app
fi
if [ "$1" = "stop" ]; then
echo 'stopping'
pkill gunicorn
fi
if [ "$1" = "restart" ]; then
echo 'restarting'
pkill gunicorn
gunicorn -c /home/ubuntu/api/gunicorn.conf.py api:app
fi
Я помещаю этот сценарий оболочки в /home/ubuntu/api
Теперь мой код ткани выглядит так
@roles('stag_api')
def stag_server(action='restart'):
if action not in ['start', 'stop', 'restart']:
print 'not a valid action. valid actions are start, stop and restart'
return
sudo('./server %s' % action)
Теперь, когда я пытаюсь запустить сервер через ткань, он печатает starting
, поэтому сценарий оболочки выполняется, и блок if
достигается, но я все еще не могу запустить сервер через ткань.
Но если я подключаюсь к серверу по ssh и делаю sudo ./server start
, запускается пушка.
Может кто-нибудь объяснить, что я делаю неправильно?