我是一名独立开发者。我们在网络主机上托管了几个网站。 svn存储库也在Web主机上。在内部,我们有一台开发机器,它可以很好地复制现场环境。
对于实时网站,我有一个来自subversion的导出,适当地用版本号命名。实时网站的文档根目录实际上是该目录的符号链接。这样,只需更改符号链接指向的位置,即可轻松地回滚到导出版本,无需停机。
当实际部署时,我会将一个版本的trunk导出到live网站的子目录,作为暂存区域,并进行一些测试。这样我就可以看到它在实时环境中的实际行为,而不会改变用户看到的任何内容。然后如果一切看起来都没问题,我会再次导出到我的帐户root并更改符号链接(并再次测试!)
这有点过头了吗?有什么其他方法呢?
答案 0 :(得分:3)
有Capistrano,它可以帮助你完成这个过程。使用SSH和密钥,可以使流程非常无缝地部署更改等。虽然这是一个ruby应用程序,您仍然可以使用它来部署PHP或其他应用程序,看看here for some info
本文将讨论它,使用共享文件夹和您的发布文件夹。共享文件夹可以保存单个部署服务器(URL,数据库连接等)的配置文件,以及在网站生命周期内上传但不在svn中的资产。你也可以让Capistrano为你处理。
虽然不知道设置的人可能会在第一次看到这个时遇到一些困难,但它确实使部署变得容易。我认为Capistrano所做的事情非常简单,可能会用另一种语言来处理你的具体情况。
另一个想法是把它绑定到SVN或任何存储库。是使用他们的钩子来执行这些部署。即每次提交到trunk都将更新开发服务器。并且分支机构会将其推送到您的临时环境。
但是this link很好地展示了如何设置这种类型的环境。我认为你所建立的是良好的做法并且做得不够。唯一可以帮助您的是自动部署到不同的环境和脚本,以帮助您设置新部署。
更新::
另外,我想说明,SVN可以处理符号链接。因此,如果您在基于Unix的服务器上进行部署,您只需将存储库中的符号链接放入其中并使用相对符号链接。
所以,如果你有
./releases/200912231043
./shared/uploads
您可以将符号链接设为
./releases/200912231043/uploads -> ../../shared/uploads
这将为您提供一种简单的方法来管理不在svn中的资产,而无需使用大量脚本进行部署。您现在可以使用提交来部署到您的开发和/或暂存。
答案 1 :(得分:0)
我认为这是正确的做法。对我来说看起来很理想:实时更新是一个经过充分测试的版本,通过提交消息可以很好地记录更改,回滚(和简单)很容易,从一个版本切换到另一个版本是原子的,因此没有停机时间。我努力以同样的方式对每个项目进行。
你的问题是什么?你不确定某事吗?它不适合你吗?如果是这样,那究竟是什么部分?
答案 2 :(得分:0)
这是我在过去几年中为几个项目所做的事情 - 从来没有遇到过这种做事方式的单一问题。
使用符号链接“回滚”的可能性可能被视为有点矫枉过正,是的......但是当你需要它来保存你部署了一个带有关键bug的版本的网站时,你真的很感激能力! 我在3年内用了2次这样的东西 - 但是,每次都真的节省了一天^^
但有一点似乎很奇怪:如果我理解正确,你是在实时(生产)数据库上测试网站的新版本吗?
如果是这样,如果应用程序中存在错误,您可能会破坏生产数据库 - 这显然会很糟糕。
我会将另一个数据库用于该测试环境,personnaly - 就像安全措施一样。
另外:你做了很多测试,这很好......但为什么不自动化其中的一些?
它可以让您更快,更频繁地进行测试,并且您将花费更少的时间进行测试,并将更多时间用于开发; - )