【问题标题】:How to Accomplish App Version Switching Using Buildout?如何使用 Buildout 实现 App 版本切换?
【发布时间】:2012-08-05 02:46:50
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 我不明白你为什么不能把HUP 发送给gunicorn。这不是 touching wsgi 文件以进行 mod_wsgi 部署的 gunicorn 等价物吗?
  • @kojiro Gunicorn 未全局安装。每个发布的包都有自己的 gunicorn 和 supervisord。这就是我认为的技巧。

标签: python virtualenv buildout gunicorn supervisord


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 2017-07-06
    • 2016-03-17
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多