跨服务器分发代码的最佳方法是什么?

时间:2010-06-18 22:22:39

标签: python software-distribution

我有一个目前分发给5台服务器的python程序,类和包的目录。看来我不断添加更多服务器,现在我只是在从本地机器到服务器上进行基本的rsync。

在n个服务器之间分发代码会有什么更好的方法?

感谢

3 个答案:

答案 0 :(得分:4)

我使用Mercurialfabric来部署所有源代码。 Fabric是用python编写的,所以你很容易上手。更新生产服务就像fab production deploy一样简单。最终会做这样的事情:

  1. 关闭所有服务并进行“正在升级”页面。
  2. 更新源代码目录。
  3. 运行所有迁移。
  4. 启动所有服务。
  5. 看到这一切都自动发生真是太棒了。

答案 1 :(得分:1)

首先,确保将所有代码保留在版本控制之下(如果您还没有这样做),这样您就可以从存储库中检出新版本的代码,而不必将其从您的服务器复制到服务器工作站。

使用版本控制,您可以使用Capistrano等工具自动检出每台服务器上的代码,而无需登录每台计算机并进行手动结帐。

通过这样的设置,将新版本部署到所有服务器就像运行

一样简单
$ cap deploy

来自您当地的机器。

答案 2 :(得分:0)

虽然我也使用版本控制来执行此操作,但您可能考虑的另一种方法是使用主机系统使用的任何包管理(例如RPM或dpkgs)打包源,并设置系统以使用自定义存储库然后“apt-get upgrade”或“yum update”将更新系统上的软件。然后你可以使用像“mussh”这样的东西在所有工具上运行stop / update / start命令。

理想情况下,您首先将其推送到“测试”存储库,让您的登台系统安装它,并且一旦对其进行了测试,您就可以将其移至生产存储库。

这与一般使用结构或版本控制的建议非常相似,只是另一种可能更适合某些人的选择。

使用软件包的缺点是您无论如何都可能正在使用版本控制,而且您必须管理这些软件包的版本号。我在我的版本控制中使用修订标记来执行此操作,因此我可以轻松地在目标系统上执行“svn update”或类似操作。

在任何一种情况下,您可能需要考虑从一个版本迁移到另一个版本。如果用户加载包含对其他元素的引用的页面,则执行更新并且这些元素消失,您会怎么做?您可能希望在部署脚本中执行某些操作,或者在您首次使用新页面推出版本的代码中执行某些操作,但保留旧引用的元素,对其进行部署,然后删除引用的元素并在以后进行部署。 / p>

这样用户就不会在页面中看到破碎的元素。