2

我正在开发(单独的 Web 开发人员)一个相当大的基于 Web 的系统,它需要在不同的位置运行。不幸的是,由于某些客户端具有拨号功能,我们不得不这样做并且没有为所有客户端提供中央服务器。每个客户端都是我们 VPN 的一部分,拨号/ISDN 上的客户端可以从我们的 Cisco 路由器按需拨号。所有客户端都可以在几秒钟内访问。

我想知道一次向所有这些客户发布更新的最佳方式是什么。自动化会很棒,因为它们有 23 多个位置可以将系统部署到,每个位置都非常定期使用。因此,在部署时,我需要显示一个“更新”页面,以便客户端在更新部分完成时不会尝试访问系统。

关于什么是最佳解决方案的任何想法

编辑:找到FileSyncTask,它允许我与 Phing 进行 rsync。打算用那个。

4

3 回答 3

1

这里还有一个维护“主”代码存储库(在 SVN、CVS 或 GIT 中)的案例。这不是您的标准“将代码的版本保留在存储库中并允许回滚”......此存储库包含您当前的生产代码(仅)。准备好更新后,您可以将工作更新的代码检查到主存储库中。您的所有服务器都会在预定的基础上检查 repo 以查看它是否已更改,如果发现更改则下载新代码。该检查过程甚至可以包括在开始 repo 下载之前打开maintenance.php文件(symcbean建议),并在下载完成后删除文件。

于 2010-09-01T14:13:59.160 回答
0

在我工作的公司,我们使用 Java 和 PHP 的大型基于 Web 的系统。对于所有系统,我们都有自己的开发环境和生产环境。这家公司有 200 多名开发人员,所以我想你可以想象我们开发的产品的规模。

我们所做的是使用 ANT 和 RPM 构建档案来创建部署包。这很容易完成。我自己没有这样做,但可能值得你研究。因为我们使用 Linux 系统,我们可以轻松地部署 RPM 包,RPM 包中的设置脚本可以确保一切都到达正确的位置。您还可以获得更正确的版本处理和发布过程。

希望这对您有所帮助。

兄弟,保罗

于 2010-08-18T08:58:43.560 回答
0

这有两个部分,让我们先处理简单的部分:

我需要显示一个“更新”页面

如果您需要在保持事务完整性的同时禁用整个站点,并从正在更新的服务器向用户发布消息,那么唯一可行的方法是通过自动前置 - 这需要提前配置(注意- 我相信这可以使用 .htaccess 文件来完成,而无需重新启动网络服务器以获得新的 PHP 配置):

<?php

   if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/maintenance.php')) {
       include_once($_SERVER['DOCUMENT_ROOT'] . '/maintenance.php');
       exit;
   }

然后只需将maintenance.php 放到您的webroot 中,就会显示该文件而不是预期的文件。请注意,它可能应该包含 session_start() 和自动刷新以确保会话不会过期。您可能希望扩展上述内容以允许仍然处理 POST 的宽限期,例如通过添加第二个 php 文件。

在部署到远程站点方面,我建议使用 rsync over ssh 来复制内容文件——应该通过一个控制脚本调用它:

  1. 如上所示应用锁定文件
  2. 运行 rsync 来复制文件
  3. 运行任何数据库部署脚本
  4. 删除锁定文件

如果每个站点都有不同的设置,那么我建议通过包含路径的层次结构管理站点特定的东西,或者甚至在本地维护每个站点的完整图像。

C。

于 2010-08-18T09:08:50.460 回答