gunicorn自动重新加载源代码

最后,我将我的开发环境从runserver迁移到gunicorn / nginx。

将runserver的autoreload特性复制到gunicorn中会很方便,所以当源发生变化时服务器会自动重启。 否则,我必须用kill -HUP手动重启服务器。

任何方式来避免手动重启?

虽然这是一个老问题,但为了保持一致性 – 从19.0版本开始,gunicorn就有了 – --reload选项。 所以没有第三方工具需要更多。

一种select是使用–max-requests将每个产生的进程限制为仅为一个请求提供服务,方法是在启动选项中添加--max-requests 1 。 每个新产生的进程都应该看到你的代码改变,并且在一个开发环境中每个请求的额外启动时间应该可以忽略不计。

Bryan Helmig提出了这个问题,我修改它以使用run_gunicorn而不是直接启动gunicorn ,以便可以将这3个命令剪切并粘贴到django项目根文件夹中的shell中(使用virtualenv激活):

 pip install watchdog -U watchmedo shell-command --patterns="*.py;*.html;*.css;*.js" --recursive --command='echo "${watch_src_path}" && kill -HUP `cat gunicorn.pid`' . & python manage.py run_gunicorn 127.0.0.1:80 --pid=gunicorn.pid 

由于性能问题,生产服务器上没有自动重新加载。

我假设你不应该在生产环境中使用它,除了可能是一个小页面或内部使用,开发服务器将工作得很好。

在生产环境中,您可以使用部署脚本(例如,使用fabric或capistrano )上传代码并为您重新启动服务器。