我最近开始尝试使用Python和Tornado Web服务器/框架进行Web开发。以前,我在LAMP堆栈上使用PHP和我自己的框架。使用PHP,部署更新的代码/新代码就像上传到服务器一样简单,因为mod_php和Apache交互的方式。
当我在Python / Tornado中添加新代码或更新代码时,是否需要重新启动Tornado服务器?如果您有许多活跃用户,我可以看到这是有问题的。
(a)我是否必须重启服务器,还是有其他/更好的方式?
(b)如果是这样,我怎样才能避免用户断线/收到错误等。当它重新启动时(可能需要几秒钟)?
[一种可能的想法是使用页面翻转范例,Nginx指向服务器,使用更新的代码启动新的服务器实例,在那里重定向Nginx并取下原始服务器......?]
答案 0 :(得分:9)
似乎最好的方法是将Nginx与多个Tornado实例一起使用,正如我在原始问题中提到的那样,正如Cole所提到的那样。 Nginx可以动态重新加载其配置文件。所以这个过程看起来像这样:
kill -HUP
命令重新加载Nginx配置文件关于热交换配置文件的Nginx上有几个有用的资源:
https://calomel.org/nginx.html(在“解释nginx.conf中的指令”部分中) http://wiki.nginx.org/CommandLine(在“使用信号加载新配置”部分中)
答案 1 :(得分:1)
使用HAProxy或Nginx代理多个Tornado进程,然后逐个重新启动。 Tornado docs cover Nginx,但它不支持websockets,所以如果你使用它们,你将需要HAProxy。
答案 2 :(得分:0)
您可以在tornado Web实例中使用debug = True开关。
T_APP = tornado.web.Application(<URL_MAP>, debug=True)
这反映了处理程序在发生时的变化。
答案 3 :(得分:0)
这是你在寻找什么?
修改模块时自动重启服务器的模块。 http://www.tornadoweb.org/en/branch2.4/autoreload.html
答案 4 :(得分:0)
如果您只想在开发过程中使用Tornado / python部署新代码而不重启服务器,则可以使用this GitHub存储库中的realtimefunc
装饰器。