如何维护不同版本的 symfony 网站
how to maintain different versions of a symfony web site
我正在开发一个 symfony 2 网站,这是我们公司销售的产品(每个客户都有自己的安装)。
我们的每个客户得到的站点版本都略有不同:有时差异很小(不同的字符串,略有不同的模板),有时则更大(激活的捆绑包不同,数据库架构不同,不同 security.yml 文件等)
目前每个版本都位于自己的 git 分支上。这目前有效,因为我们刚刚开始销售并且还没有很多客户(=分支机构)。
但我想转向更好的解决方案。
有什么想法吗?
谢谢,
一个
我认为分支不是一个好的解决方案,因为它不适用于此类用例。正如我所见,分支应该用于暂存或 features/fixes.
据我所知,您的选择很少(如果您不熟悉这些选项,您应该在我附加的链接中阅读更多关于它们的信息):
- Git 子模块。 "A submodule allows you to keep another Git repository in a subdirectory of your repository. The other repository has its own history, which does not interfere with the history of the current repository. This can be used to have external dependencies such as third party libraries for example."http://git-scm.com/docs/git-submodule
- 作曲家。这是我认为最适合你的。使用常规的依赖项管理器([=32= 的作曲家],nodejs 的 npm 等)。我会让你完全控制所使用的版本 + 简单的部署选项。 https://getcomposer.org/
另一种选择是 "old school".. 如果它们都在同一台服务器上,只需将 "Core" 内容保留在根文件夹中并将其包含在每个项目中。这不是推荐的方法,但它可能就足够了,不需要你做太多改变
我不同意。如果它是一个单一的应用程序,那么每个客户端或版本的分支,即需要单独历史记录(更改跟踪)的配置,正是正确的做法。客户端 use/share 相同的应用程序,"core",无论如何,但您可能想要控制一个客户端的 features/bugs 中的更改何时合并到其他配置中,即分支。每个客户端都必须 "upgraded" 通过手动从开发分支合并到客户端分支。您想支付这笔开销以获得稳定和隔离。
至于你说的具体区别:
- 不同的字符串:客户端特定的配置、常量、部署的东西,可能应该在 per-client/deployment 模块(包括文件,等等)中,合并时你可以简单地忽略它们,这样核心应用程序代码就会从来没有 client/deployment 具体差异。
- 模板略有不同:嗯,这味道不好;如果您可以使用符号常量或部分或其他任何东西,并将差异移动到 config.php,那么请参阅上面的解决方案。否则,模板差异是否表明它不再是同一个应用程序?
- 激活不同的包:如果您可以将 include 语句放在 config.php 中,没问题。
- 不同的数据库模式:讨厌的事情。这个应用程序可以独立于架构吗?你能以某种方式进行多态性吗? Nu,我不知道,二十年没接触PHP,我现在只做CoffeeScript和NoSQL。 ;o)
- 不同 security.yml:与 config.php 相同,没问题,只是不要合并该文件,甚至完全停止跟踪它(从回购中删除)。
HTH。
;o)
我正在开发一个 symfony 2 网站,这是我们公司销售的产品(每个客户都有自己的安装)。
我们的每个客户得到的站点版本都略有不同:有时差异很小(不同的字符串,略有不同的模板),有时则更大(激活的捆绑包不同,数据库架构不同,不同 security.yml 文件等)
目前每个版本都位于自己的 git 分支上。这目前有效,因为我们刚刚开始销售并且还没有很多客户(=分支机构)。
但我想转向更好的解决方案。 有什么想法吗?
谢谢, 一个
我认为分支不是一个好的解决方案,因为它不适用于此类用例。正如我所见,分支应该用于暂存或 features/fixes.
据我所知,您的选择很少(如果您不熟悉这些选项,您应该在我附加的链接中阅读更多关于它们的信息):
- Git 子模块。 "A submodule allows you to keep another Git repository in a subdirectory of your repository. The other repository has its own history, which does not interfere with the history of the current repository. This can be used to have external dependencies such as third party libraries for example."http://git-scm.com/docs/git-submodule
- 作曲家。这是我认为最适合你的。使用常规的依赖项管理器([=32= 的作曲家],nodejs 的 npm 等)。我会让你完全控制所使用的版本 + 简单的部署选项。 https://getcomposer.org/
另一种选择是 "old school".. 如果它们都在同一台服务器上,只需将 "Core" 内容保留在根文件夹中并将其包含在每个项目中。这不是推荐的方法,但它可能就足够了,不需要你做太多改变
我不同意。如果它是一个单一的应用程序,那么每个客户端或版本的分支,即需要单独历史记录(更改跟踪)的配置,正是正确的做法。客户端 use/share 相同的应用程序,"core",无论如何,但您可能想要控制一个客户端的 features/bugs 中的更改何时合并到其他配置中,即分支。每个客户端都必须 "upgraded" 通过手动从开发分支合并到客户端分支。您想支付这笔开销以获得稳定和隔离。
至于你说的具体区别:
- 不同的字符串:客户端特定的配置、常量、部署的东西,可能应该在 per-client/deployment 模块(包括文件,等等)中,合并时你可以简单地忽略它们,这样核心应用程序代码就会从来没有 client/deployment 具体差异。
- 模板略有不同:嗯,这味道不好;如果您可以使用符号常量或部分或其他任何东西,并将差异移动到 config.php,那么请参阅上面的解决方案。否则,模板差异是否表明它不再是同一个应用程序?
- 激活不同的包:如果您可以将 include 语句放在 config.php 中,没问题。
- 不同的数据库模式:讨厌的事情。这个应用程序可以独立于架构吗?你能以某种方式进行多态性吗? Nu,我不知道,二十年没接触PHP,我现在只做CoffeeScript和NoSQL。 ;o)
- 不同 security.yml:与 config.php 相同,没问题,只是不要合并该文件,甚至完全停止跟踪它(从回购中删除)。
HTH。 ;o)