13

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

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

当我删除并重新创建我的 virtualenv 时,gunicorn 使用新代码按预期运行。

有 Python 缓存之类的吗?我还尝试删除所有*.pyc文件。

4

2 回答 2

6

尝试这个:

$ kill -HUP masterpid

另外,请查看以下帖子底部的一些注释。

于 2011-04-28T02:03:11.020 回答
4

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

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

(注意,我将斜杠放在该示例中实际上不在 conf 文件中的换行符之前——为了便于阅读,我插入了这些换行符;我不确定这是否适用于 IRL)

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

对包括我在内的许多人来说都是一种魅力。如果您不知道,它watchdog本身就非常有用并且值得一看。

于 2012-05-21T21:50:17.510 回答