有没有办法在没有重新启动服务器的情况下使用Tornado/Python部署新代码?

Kyl*_*son 6 python tornado

我最近开始尝试使用Python和Tornado Web服务器/框架进行Web开发.以前,我在LAMP堆栈上使用PHP和我自己的框架.使用PHP,部署更新的代码/新代码就像上传到服务器一样简单,因为mod_php和Apache交互的方式.

当我在Python/Tornado中添加新代码或更新代码时,是否需要重新启动Tornado服务器?如果您有许多活跃用户,我可以看到这是有问题的.

(a)我是否必须重新启动服务器,还是有其他/更好的方法?

(b)如果是这样,我怎样才能避免用户断线/收到错误/等等.当它重新启动时(可能需要几秒钟)?

[一种可能的想法是使用页面翻转范例,Nginx指向服务器,使用更新的代码启动新服务器实例,在那里重定向Nginx并取下原始服务器......?]

Kyl*_*son 9

似乎最好的方法是使用Nginx和多个Tornado实例,正如我在原始问题中提到的那样,并且正如Cole所提到的那样.Nginx可以动态重新加载其配置文件.所以这个过程看起来像这样:

  1. 更新Python/Tornado Web应用程序代码
  2. 在另一个端口上启动应用程序的新实例
  3. 更新Nginx的配置文件以指向新实例(首先测试配置文件的语法)
  4. 使用kill -HUP命令重新加载Nginx配置文件
  5. 停止旧的Python/Tornado Web服务器实例

关于热交换配置文件的Nginx上有几个有用的资源:

https://calomel.org/nginx.html(在"解释nginx.conf中的指令"部分) http://wiki.nginx.org/CommandLine(在"使用信号加载新配置"部分中)