python - 如何使用Buildout实现App版本切换?

标签 python virtualenv buildout gunicorn supervisord

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

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

  1. 放弃 gunicorn 和 superviosrd,转而使用 apache mod_wsgi,这样在部署新版本时,我只需更改 .wsgi 文件中的文件夹,服务器就会重新启动。

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

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

提前致谢。

最佳答案

就像您的 point-mod_wsgi-at-a-different-folder 解决方案一样,您可以对 gunicorn/buildout 执行相同的操作。只需在不同的目录中设置最新的构建,停止旧的 gunicorn 并启动新的。

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

备选方案:使用不同的端口号设置新的,更改 nginx 配置,如果你真的想要零停机秒数,则退出 ngnix。

关于python - 如何使用Buildout实现App版本切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11813585/

相关文章:

python - 在 Python 中生成 RFC 3339 时间戳

python - 更改或删除 PaginationSerializer 中的默认返回值

python - 我需要转换成波形文件

python - [Python]创建虚拟环境失败

centos - python virtualenvwrapper 类型错误 : __init__() got an unexpected keyword argument 'stream'

python-2.7 - 扩建还是不扩建?

python - 在代理后面运行构建时,(...) 主机名 <proxy> 上的下载错误与 '*.c.ssl.faSTLy.net' 、(...) 中的任何一个都不匹配

plone - 在多个 UNIX 用户之间共享 buildout-cache/eggs

python - PyQt4 qTableView对齐

python:了解多个版本、符号链接(symbolic link)和 virtualenv