繁体   English   中英

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

[英]Is there a way to deploy new code with Tornado/Python without restarting the server?

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

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

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

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

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

似乎最好的方法是使用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 (在“使用信号加载新配置”部分中)

使用HAProxyNginx和代理到多个Tornado进程,然后您可以逐个重新启动。 Tornado文档涵盖Nginx ,但它不支持websockets,所以如果你使用它们,你将需要HAProxy。

您可以使用带有龙卷风Web实例的debug = True开关。

T_APP = tornado.web.Application(<URL_MAP>, debug=True)

这反映了处理程序在发生时的变化。

这是你在寻找什么?

修改模块时自动重新启动服务器的模块。 http://www.tornadoweb.org/en/branch2.4/autoreload.html

如果您只想在开发期间使用tornado / python部署新代码而无需重新启动服务器,则可以在 GitHub存储库中使用realtimefunc装饰器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM