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 )上传代码并为您重新启动服务器。