我的应用程序是使用Flask开发的,并使用buildout来处理依赖项隔离。我计划使用Gunicorn和supervisord作为wsgi容器和进程管理器,在其前面有Nginx进行负载平衡。部署新版本的应用程序时出现以下问题:所有内容都在子文件夹中构建,如何重新启动gunicorn服务器以便优雅地进行版本切换?
我当然想出了一些解决方案:
Ditch gunicorn和superviosrd,转向apache mod_wsgi,所以在部署新版本时我只需更改.wsgi文件中的文件夹,服务器就会重启。
使用virtualenv并安装gunicorn,supervisord以及我的应用程序包,因此在切换版本时我只需使用supervisorctl重新启动它。
是否有可以实现这种情况的“纯粹”构建方式?或者任何正在使用的生产解决方案都将受到赞赏。
提前致谢。
答案 0 :(得分:1)
就像你的point-mod_wsgi-at-a-different-folder解决方案一样,你可以用gunicorn / buildout做同样的事情。只需在不同的目录中设置最新的buildout,停止旧的gunicorn并启动新的。
当然,在停止一个和启动另一个之间会有短暂的延迟。
替代方案:使用不同的端口号设置新的端口号,如果您真的想要零停机时间,则更改nginx配置并启动ngnix。