如何使用Buildout完成应用版本切换?

时间:2012-08-05 02:46:51

标签: python virtualenv buildout gunicorn supervisord

我的应用程序是使用Flask开发的,并使用buildout来处理依赖项隔离。我计划使用Gunicorn和supervisord作为wsgi容器和进程管理器,在其前面有Nginx进行负载平衡。部署新版本的应用程序时出现以下问题:所有内容都在子文件夹中构建,如何重新启动gunicorn服务器以便优雅地进行版本切换?

我当然想出了一些解决方案:

  1. Ditch gunicorn和superviosrd,转向apache mod_wsgi,所以在部署新版本时我只需更改.wsgi文件中的文件夹,服务器就会重启。

  2. 使用virtualenv并安装gunicorn,supervisord以及我的应用程序包,因此在切换版本时我只需使用supervisorctl重新启动它。

  3. 是否有可以实现这种情况的“纯粹”构建方式?或者任何正在使用的生产解决方案都将受到赞赏。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

就像你的point-mod_wsgi-at-a-different-folder解决方案一样,你可以用gunicorn / buildout做同样的事情。只需在不同的目录中设置最新的buildout,停止旧的gunicorn并启动新的。

当然,在停止一个和启动另一个之间会有短暂的延迟。

替代方案:使用不同的端口号设置新的端口号,如果您真的想要零停机时间,则更改nginx配置并启动ngnix。