2013-07-19 52 views
2

我的代碼位於/home/ubuntu/api在遠程服務器。 WSGI對象名爲app,其存在於/home/ubuntu/api/api.py中。我gunicorn的conf文件名爲gunicorn.conf.py/home/ubuntu/api無法啓動與面料gunicorn

是目前我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') 

現在織物不顯示任何錯誤,但gunicorn不啓動。

所以我創建__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') 

即使現在面料不顯示任何錯誤,但gunicorn不啓動。

所以我創建了一個名爲server一個shell腳本,它的代碼看起來像這樣

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

這個shell腳本現在我的布代碼看起來像這樣

@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,因此shell腳本正在執行,而if塊已達到,但仍然無法通過結構啓動服務器。

但是,如果我SSH服務器並做sudo ./server start,gunicorn啓動。

有人可以解釋我做錯了什麼?

+0

提供錯誤日誌,請 –

+0

@amezhenin沒有錯誤。它只是不啓動gunicorn – lovesh

+0

你知道嗎? –

回答

2
+0

請注意,只有鏈接的答案是不鼓勵的(鏈接往往會隨着時間的推移而被打破)。請考慮編輯您的答案並在此添加摘要。 – bummi

+2

謝謝。加入'pty = False'起作用。所以我將我的代碼改爲'sudo('./ server%s'%action,pty = False)',現在它可以成功啓動guncorn。請讓你的回答更具描述性。 – lovesh

+0

@lovesh謝謝你!原始答案中的鏈接不再有效。我發現最接近的是http://docs.fabfile.org/en/1.7/usage/interactivity.html,但它沒有在init腳本或後臺進程的上下文中討論它。 – Konklone