2010-06-18 154 views
4

我有一个目录分发给5个服务器的python程序,类和包。看来我不断地增加更多的服务器,现在我只是从我的本地盒子到服务器做一个基本的rsync。跨服务器分发代码的最佳方式是什么?

在n个服务器上分发代码的更好方法是什么?

感谢

回答

1

首先,请务必保留所有的代码版本控制下(如果你还没有这样做),这样就可以从仓库检出,而不必复制代码的新版本它从您的工作站到服务器。

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

有了这样的设置,部署一个新版本的所有服务器可以从本地机器上运行

$ cap deploy 

一样简单。

4

我用Mercurialfabric来部署所有的源代码。 Fabric是用python编写的,所以你很容易就可以开始使用。更新生产服务与fab production deploy一样简单。结束ups做这样的事情:

  1. 关闭所有的服务,并把“升级进度”页。
  2. 更新源代码目录。
  3. 运行所有迁移。
  4. 启动所有服务。

看到这一切都自动发生,真是太棒了。

+0

'fabric' - 我一直在寻找这个我的整个成年生活。 – 2010-06-19 12:12:22

0

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

理想情况下,您应先将其推送到“测试”存储库,让您的分段系统安装它,并且一旦您的测试已经签署,您就可以将其移至生产存储库。

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

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

无论哪种情况,您都需要考虑从一个版本迁移到下一个版本。如果用户加载包含对其他元素的引用的页面,则会执行更新并且这些元素消失,那么您会做什么?您可能希望在部署脚本中执行某些操作,或者在代码中先用新页面推出某个版本,然后保留旧的引用元素,然后部署该元素,然后删除引用的元素并稍后进行部署。

用这种方式,用户不会在页面内看到破碎的元素。

相关问题