私のコードは/home/ubuntu/api
リモートサーバーにあります。WSGI オブジェクトは名前が付けられapp
、 に存在し/home/ubuntu/api/api.py
ます。私の gunicorn conf ファイルが呼び出され、そこgunicorn.conf.py
に存在します。/home/ubuntu/api
私の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
app
これにより、パッケージの名前空間でWSGI を使用できるようになります。次に、ファブリックコードをこれに変更しました
@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
、gunicorn が起動します。
誰かが私が間違っていることを説明できますか?