使用共享项目代码处理php web应用程序开发和部署的建议

时间:2009-11-27 14:04:00

标签: php svn version-control deployment

我想知道(对于一个单独的开发者)最好的方式是什么

  1. 开发一个依赖于其他项目代码的项目
  2. 将生成的项目部署到服务器
  3. 我打算将我的代码放在svn中,并将共享代码作为一个单独的项目。 svn:externals存在一些我无法完全估计的问题。

    我读过

    但是php-projects(和其他解释的源代码)有一个特殊之处:没有最终的可执行文件来自你的库。因此,外部依赖关系始终在原始源代码上。

    理想情况下,我真的希望能够在一个项目及其所依赖的项目上同时开发

    可能的方式: 检查项目在子文件夹中的依赖关系作为主干的工作副本。我预见的问题:

    1. 如果要部署项目,可能需要冻结其依赖项,对吧?
    2. 我认为依赖代码不应该在项目存储库中以副本的形式结束。

      *(update1:​​我还假设svn:如果我不能回到符号链接上,则会出现问题,请参阅my comment

      我仍在寻找不需要使用交接点的建议。它们是winxp中的一种不受支持的黑客攻击,可能会破坏某些程序*

    3. 这引出了我问题的最后一部分(因为一方对另一方有影响):如何部署具有此类依赖关系的应用程序? 我已经研究了BuildOut for Python,但它似乎与python生态系统紧密相关(从Web上解析和获取python模块等)。

      我非常渴望了解您的最佳做法。

2 个答案:

答案 0 :(得分:1)

一种方法可能是:

  • 每个依赖项的一个存储库
  • 项目的需求配置文件,其中记录了依赖项及其版本(可能甚至是您自己的依赖项版本)
  • 处理开发,测试和部署环境设置的自动化脚本(可以像记录设置过程一样简单,并使其可配置和可执行)

这有几个好处:

  • 您可以轻松(甚至自动)检查您的依赖项是否已过时(另一个更好的库可用),或者已知安全漏洞。
  • 更多关于依赖关系的意识
  • 更容易调试/修复/修补由依赖项引起的问题
  • 忽略svn:externals也可能会减轻您将来转换为git,bzr,hg等分布式版本控制时的痛苦。
  • 如果你想在另一台机器上设置你的环境(或者最终另一个开发人员接管或加入),它将为你节省大量时间

在Web开发和服务器管理中很流行的一些KISS自动化工具:

要点:

记录您的要求(最好是机器可读 - > yaml,ini,json,xml)并处理项目之外的依赖关系。它为您提供了一些间接性,使自动化设置和部署更容易,并且更少依赖于您的版本控制系统(关注点分离,工作的最佳工具等)。

答案 1 :(得分:0)

这可能听起来很便宜,但我想在这个问题主题中我有一个答案:svn folder structure organization

只要您留在自己的存储库中,我就不会认为svn:externals有害。只是不要过度。

使用此策略进行部署也是一块蛋糕,因为它在一个标签中是ALL(结帐,运行,利润)。您的目录结构在所有图层,分支,标记,主干上保持不变。

通过将外部指向标签(并在svn服务器上使标签只读),您可以100%确定您获得了预期的库。