2015-06-22 105 views
0

我在symfony 2网站上工作,它是我们公司销售的产品(每个客户都有自己的安装)。如何维护symfony网站的不同版本

我们的每个客户端都得到一个略有不同的版本:有时候差异很小(不同的字符串,稍微不同的模板),有时它们更大(不同的数据库激活,不同的数据库模式,不同的security.yml文件等等)

当前每个版本都在它自己的git分支上。由于我们现在只开始销售,并且没有很多客户(=分支机构),所以这种方法现在可行。

但我想转移到更好的解决方案。 任何想法?

感谢, 一个

回答

1

我不同意。如果是单个应用程序,那么每个客户端或发布版本的分支,即需要单独历史记录(更改跟踪)的配置,恰恰是正确的做法。客户端使用/共享相同的应用程序,“核心”,无论如何,但可能要控制何时在一个客户端的功能/错误更改合并到其他配置,即分支机构。每个客户都必须通过从开发分支到客户分支的手动分开进行“升级”。你想支付这个开销来获得稳定和隔离。

至于你提到的具体区别:

  • 不同的字符串:客户的具体CONFIGS,常量,部署的东西,也许应该是在每个客户端/部署的模块(包括文件,等等),你可以在合并时简单地忽略,这样核心应用程序代码就永远不会有客户端/部署特定的差异。
  • 略有不同的模板:嗯,这味道不好;如果您可以使用符号常量或部分或其他,并将差异移至config.php,请参阅上述解决方案。否则,不要模板差异表明它不是同一个应用了吗?
  • 激活了不同的包:如果你可以把include语句放在config.php中,没问题。
  • 不同的数据库模式:令人讨厌的业务。这个应用程序可以与架构无关吗?你能以某种方式做多态吗? Nu,我不知道,二十年来没有碰过PHP,现在我只做CoffeeScript和NoSQL。 ; o)
  • 不同的security.yml:与config.php相同,没有问题,只是不合并该文件,甚至完全停止跟踪它(从回购中删除)。

HTH。 ; o)

1

我不认为一个分支是一个很好的解决方案,它不适合这种使用情况。正如我所看到的,分支机构应该用于分期或功能/修复。

我看到它,你有几个选项(如果你不熟悉这些选项,你应该在我附链接了解更多关于他们):

  • Git的子模块。 “一个子模块允许你将另一个Git仓库保存在仓库的一个子目录中,另一个仓库有它自己的历史记录,它不会干扰当前仓库的历史记录,这可以用于具有外部依赖项,如第三方库例如。” http://git-scm.com/docs/git-submodule
  • 作曲家。这是我认为最适合你的东西。使用常规的依赖关系管理器(php的作曲家,nodejs的npm等)。我会给你完全控制版本被使用+易于部署的选项。 https://getcomposer.org/

另一种办法是做“老派”。在情况下,他们都在同一个服务器,只保留“核心”的东西,在根文件夹,并将其包括为每个项目。这不是一个推荐的方式去,但它可能是足够的,不会需要太多的变化从你

+0

感谢您的回答,这是非常丰富的,但我不认为我可以模块化足以解决我与作曲家的问题。 git子模块对我来说是新的,看起来非常有用。谢谢! – strum