2011-04-22 34 views
12

我得到了不一致的代碼重載行爲,Django 1.3應用程序和gunicorn 0.12.1在virtualenv中運行。Gunicorn不重載Django應用程序

即使重新啓動特定的gunicorn過程PID,Gunicorn也不會正確地重新加載我的應用程序。當我運行一個基本的runserver(通過Django,通過manage.py命令),這不是一個問題。

當我刪除並重新創建我的virtualenv時,gunicorn按照預期運行新代碼。

是否有Python緩存或什麼?我也嘗試刪除所有*.pyc文件。

回答

6

試試這個:

$ kill -HUP masterpid 

而且,看看一些音符在following post的底部。

4

我遇到了這個問題的變化 - 正如Pokomy先生所鏈接的文章中所建議的,用HUP信號殺死gunicorn主進程似乎有訣竅。

如果您使用python watchdog模塊,可以輕鬆設置文件自動重裝;設置其實是不言自明的,所以這裏從我的發展supervisord.conf文件的一個片段:實際上不是在conf文件換行符之前

[program:ost2] 
autostart=true 
command=/usr/local/share/python/gunicorn --debug\ 
-c /Users/fish/Dropbox/ost2/ost2/utils/gunicorn/ost2-debug.py wsgi_debug 
directory=/Users/fish/Dropbox/ost2/ost2 
priority=500 
; (etc) 

[program:ost2-reloader] 
autostart=true 
autorestart=false 
directory=/tmp 
command=/usr/local/share/python/watchmedo shell-command\ 
--patterns="*.py;*.txt;*.html;*.css;*.less;*.js;*.coffee"\ 
-R --command='kill -HUP $(cat /usr/local/gunicorn/gunicorn.pid)'\ 
/Users/fish/Dropbox/ost2/ost2/ 
priority=996 
; (etc) 

(注:我把斜線是樣本中 - 我插入這些換行符的易讀性;我不確定這是否工作IRL)

第一個程序是gunicorn進程,我在開發過程中運行一個單線程以使用Werkzeug調試器。第二部分是有趣的一點:該命令說,「如果文件的後綴與該列表中的一個匹配,則在該目錄樹中的文件發生更改時,終止由gunicorn PID文件指定的進程」。

對於包括我在內的許多人來說,它就像一種魅力。如果你不知道,watchdog是非常有用的,值得一看,在它自己的權利。

+1

這很棒,如果您使用主管來管理gunicorn,您可以將您的cat命令替換爲:supervisorctl status gunicorn_task_name | sed -e's /.* pid \([0-9] \ {1,5 \} \)。*/\ 1/g' – 2013-04-12 21:43:32

相關問題