1

我是一个孤独的开发者。我们有几个网站托管在网络主机上。svn 存储库也在网络主机上。在内部,我们有一台开发机器,它是对现场环境的足够接近的复制。

对于实时网站,我从 subversion 导出,并以版本号适当命名。实时网站的文档根目录实际上是指向该目录的符号链接。这样,我可以轻松地回滚或回滚到导出的版本而无需停机,只需更改符号链接指向的位置即可。

到了实际部署的时候,我会把一个版本的主干导出到直播网站的一个子目录,作为一个暂存区,做一些测试。这样我就可以看到它在实时环境中的实际行为,而无需更改用户看到的任何内容。然后,如果一切正常,我将再次导出到我的帐户根目录并更改符号链接(并再次测试!)

这是不是太过分了?还有什么其他方法可以做到这一点?

4

3 回答 3

3

Capistrano 可以帮助您完成此过程。使用 SSH 和密钥,它使部署更改等的过程非常无缝。虽然这是一个 ruby​​ 应用程序,但您仍然可以使用它来部署 PHP 或其他应用程序,请查看此处了解一些信息

本文将讨论它,使用共享文件夹和发布文件夹。共享文件夹可以保存您的个人部署服务器(URL、数据库连接等)的配置文件,以及在网站生命周期内上传且不在 svn 中的资产。你也可以让 Capistrano 为你处理这个问题。

虽然不知道设置的人第一次看到这个可能会有些困难,但它确实使部署变得容易。我认为 Capistrano 所做的非常简单,可能可以用另一种语言编写来处理您的特定场景。

另一个将其与 SVN 或任何存储库联系起来的想法。就是使用它们的钩子来执行这些部署。即每次对主干的提交都会更新开发服务器。一个分支会将其推送到您的暂存环境。

但是这个链接很好地展示了如何设置这种类型的环境。我认为您设置的内容是很好的做法,但做得还不够。唯一可以帮助您的是自动部署到不同的环境和脚本,以帮助您设置新部署。

更新 ::
另外,我想指出,SVN 可以处理符号链接。因此,如果您在基于 Unix 的服务器上进行部署,您只需将符号链接放入存储库中并使用相对符号链接。

所以如果你有

./releases/200912231043
./shared/uploads

你可以把你的符号链接作为

./releases/200912231043/uploads -> ../../shared/uploads

这将为您提供一种简单的方法来管理不在 svn 中的资产,而无需使用大量部署的脚本。您现在可以使用提交来部署到您的开发和/或登台。

于 2009-12-23T15:44:09.117 回答
0

我认为这正是正确的做法。对我来说看起来很理想:实时更新是经过全面测试的版本,通过提交消息可以很好地记录更改,回滚(和回滚)很容易,并且从一个版本切换到另一个版本是原子的,因此没有停机时间。我努力在每个项目中都以同样的方式做到这一点。

你的问题是什么?你不确定吗?它不适合你吗?如果有,具体是哪一部分?

于 2009-12-23T15:36:37.203 回答
0

这就像我在过去几年中为几个项目所做的那样——而且这种做事方式从来没有遇到过任何问题。

使用符号链接“回滚”的可能性可能被视为有点矫枉过正,是的......但是当您需要它来保存您部署具有严重错误的版本的网站时,您真的很感激拥有这种能力!
我在 3 年内用过 2 次这样的东西——但是,每次,它真的节省了一天 ^^


不过,我觉得有一件事很奇怪:如果我理解正确,您是在实时(生产)数据库上测试网站的新版本吗?

如果是这样,如果应用程序中存在错误,您可能会破坏您的生产数据库——这显然会很糟糕。

我会为那个测试环境使用另一个数据库,个人 - 只是作为一种安全措施。


另外:你正在做很多测试,这很好......但为什么不自动化其中一些呢?

它可以让您更快、更频繁地进行测试,并且您将花费更少的测试时间和更多的开发时间;-)

于 2009-12-23T15:38:31.893 回答