【问题标题】:deploy website from version control - export and symlinks?从版本控制部署网站 - 导出和符号链接?
【发布时间】:2010-01-04 03:26:03
【问题描述】:

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

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

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

这是不是太过分了?还有其他方法吗?

【问题讨论】:

    标签: svn version-control web web-deployment


    【解决方案1】:

    Capistrano 可在此过程中为您提供帮助。使用 SSH 和密钥,它使部署更改等的过程非常无缝。虽然这是一个 ruby​​ 应用程序,你仍然可以使用它来部署 PHP 或其他应用程序,看看here for some info

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

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

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

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

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

    如果你有

    ./releases/200912231043
    ./shared/uploads
    

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • “这是不是太过分了?”每个部分都在工作。但是有没有不必要的步骤?我认识一个人,他有一个可重复使用的咖啡过滤器,他买了纸质过滤器并将它们放入可重复使用的过滤器中。他可以跳过购买纸质过滤器并节省一些钱!
      【解决方案3】:

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

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


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

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

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


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

      这将使您能够更快、更频繁地进行测试,并且您将花费更少的时间进行测试,而将更多的时间用于开发;-)

      【讨论】:

      • 当然,我们在开发站点上进行测试,该站点具有实时数据库的副本,并且可以在不伤害我们的实时站点的情况下受伤。但我认为也必须在分阶段进行测试,然后在生产中再次测试。我不想部署一个版本,只是假设一切顺利!也许在部署之前对实时站点进行数据库备份是另一个很好的措施。
      • 如何自动化网站功能测试?尤其是 ajax 功能?
      • 关于测试的自动化,至少在测试整个应用程序时(即直接在浏览器中)我非常喜欢 Selenium ;;根据您的语言,您还可以查看用于自动化测试的工具,例如 jUnit、nUnit、PHPUnit...
      猜你喜欢
      • 2011-01-30
      • 2018-01-10
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多