Gunicorn没有重新加载Django应用程序

时间:2011-04-22 09:44:04

标签: python django virtualenv development-environment gunicorn

我的代码重新加载行为不一致,Django 1.3应用程序和gunicorn 0.12.1在virtualenv中运行。

即使重新启动特定的gunicorn进程PID,Gunicorn也无法正确重新加载我的应用程序。当我运行基本runserver(通过Django,通过manage.py命令)时,这不是问题。

当我移除并重新创建我的virtualenv时,gunicorn会按照预期的新代码运行。

是否有Python缓存或其他什么?我还尝试删除所有*.pyc个文件。

2 个答案:

答案 0 :(得分:6)

试试这个:

$ kill -HUP masterpid

另外,请查看following post底部的一些注释。

答案 1 :(得分:4)

我也遇到了这个问题的变化 - 正如Pokomy先生链接的文章所建议的那样,用HUP信号杀死gunicorn主进程似乎可以解决这个问题。

如果使用python watchdog模块,可以轻松设置文件保存的自动重载;设置实际上是不言自明的,所以这是我的开发supervisord.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)

(N.B。我在实际上不在conf文件中的换行符之前放入了该样本中的斜杠 - 我插入了这些换行符以便易读;我不确定这是否适用于IRL)

第一个程序是gunicorn进程,我在开发期间在单个线程中运行以使用Werkzeug调试器。第二部分是有趣的一点:该命令说,“如果文件的后缀与此列表中的一个匹配,则当该目录树中的文件发生更改时,杀死gunicorn PID文件指定的进程”。

对于包括我在内的许如果您不了解它,watchdog非常有用,值得一看,本身就是这样。