2013-07-16 39 views
4

我試圖部署我的應用程序,並且我的文件夾以某種方式組織,這意味着我只想在部署新版本時更改符號鏈接。就像這樣:在將當前符號鏈接切換到新目錄後,優雅地重新加載gunicorn

./2013-07-16-10-12-48-test/ 
./2013-07-16-10-17-01-test/ 
./current -> 2013-07-16-10-17-01-test/ 

一般情況下我簡單地使用kill -HUP master-pid只要目錄保持不變,一切正常。但是,當我第一次更改符號鏈接,然後重新加載代碼仍然從舊目錄通過其絕對路徑運行,像gunicorn是遵循符號鏈接並保存最終路徑。 我開始gunicorn這樣的:gunicorn run:app -c gunicorn-config.py「當前」目錄內和我的配置文件看起來像這樣:

workers = 4 
worker_class = 'gevent' 
bind = '127.0.0.1:5000' 
pidfile = '/var/run/gunicorn.pid' 
debug = False 
loglevel = 'debug' 
errorlog = '/var/log/gunicorn-error.log' 
daemon = True 

是否有gunicorn重新評估的符號鏈接或只保存符號鏈接,而不是完整的方法路徑?也許在某種on_startingon_reload掛鉤?

Here's解決方案我無法工作,也許這給了一些更多的上下文。

+1

您是否設法讓此工作成功?此外,您提供的鏈接已損壞。 – AJP

+0

@AJP:我會在下面添加我的解決方案作爲回覆=) – moodh

+1

哦,並且鏈接對我來說很奇怪.. – moodh

回答

1

我通過使用USR2 signal得到了這個工作。 這是我的init.d文件,部署完成後,我將運行service gunicorn start_or_reload,它會根據新位置啓動或正常重新加載代碼。它在技術上催生了當前主人內部的另一位大師,然後殺死了那些老工人和主人,並最終促成了這位新生的主人。我採用這個解決方案後來添加了煙霧測試,然後殺掉了老主人和那樣的東西。我希望這可以幫助別人!

#!/bin/sh 
### BEGIN INIT INFO 
# Provides:   thin 
# Required-Start: $local_fs $remote_fs 
# Required-Stop:  $local_fs $remote_fs 
# Default-Start:  2 3 4 5 
# Default-Stop:  S 0 1 6 
# Short-Description: thin initscript 
# Description:  thin 
### END INIT INFO 

# Original author: Forrest Robertson 

# Do NOT "set -e" 

DEPLOY_PATH=/opt/project/current 
PID_FOLDER=/var/run/gunicorn 
PID_FILE=$PID_FOLDER/project.pid 
OLD_PID_FILE=$PID_FOLDER/project.pid.oldbin 

start() { 
    cd $DEPLOY_PATH && gunicorn run:app -c gunicorn-config.py 
} 

stop() { 
    if [ -f $PID_FILE ] 
    then 
    kill `cat $PID_FILE` 
    rm $PID_FILE 
    fi 
} 

reload() { 
    kill -USR2 `cat $PID_FILE` 
    sleep 1 
    kill -QUIT `cat $OLD_PID_FILE` 
    rm $OLD_PID_FILE 
} 

start_or_reload() { 
    if [ -f $PID_FILE ] 
    then 
     reload 
    else 
     start 
    fi 
} 

case "$1" in 
    start) 
     echo "Starting server..." 
     start 
    ;; 
    reload) 
     echo "Reloading server..." 
     reload 
    ;; 
    stop) 
     echo "Stopping server..." 
     stop 
    ;; 
    restart) 
     echo "Restarting server..." 
     stop && sleep 1 && start 
    ;; 
    start_or_reload) 
     echo 'Starting or reloading server...' 
     start_or_reload 
    ;; 
    wup) 
     echo "Increasing workers..." 
     kill -TTIN `cat $PID_FILE` 
    ;; 
    wdown) 
     echo "Decreasing workers..." 
     kill kill -TTOU `cat $PID_FILE` 
    ;; 
    *) 
     echo "Usage: $SCRIPT_NAME {start|reload|stop|restart|start_or_reload|wup|wdown}" >&2 
     exit 3 
    ;; 
esac 

: 
相關問題