【发布时间】:2017-06-20 09:51:09
【问题描述】:
所以,我在 Symfony 3 之上构建了一个大型的 SAAS Web 应用程序。开始时大约有 10 到 20 个应用程序,现在已经发展到超过 500 多个应用程序。每个应用程序仅供应商目录的大小就已超过 150 MB。
所有这些应用程序都有自己的数据库。我想保持这种状态。但是,我相信如果共享一些代码会很好。以 vendor 和 src 目录为例。每个应用程序都是一样的,但是它们都在 OpCache 中单独“加载”。我相信从资源的角度来说,最好是共享这些目录。
Composer 和 Symfony 似乎都不太支持具有共享目录的多实例应用程序。但是我想知道是否有人有任何线索可以实现我的想法,或者我的计划不可行?
每个应用程序的配置不同(parameters.yml),Web 目录包含每个应用程序的不同样式表。所以他们需要与其他人分开。
我一直在考虑为此使用环境设置,但是我们有环境“test”,“dev”,“application1”,“application2”等感觉不对。config_prod.yml 突然也然后就无法使用了。
我的思维方式有问题吗?关于如何实现这一目标的任何建议?还是我应该只使用一个完整的单独实例?
(我们的应用程序正在使用 SemVer,如果我们共享 1.0.0 版、1.1.0 版等的代码,那就更好了。所以这甚至是最上面的下一层。但也许这是下一步。 )
编辑: 再澄清一点; 本质上,您可以说 web 目录和 var 目录都是不可共享的。 web 目录包含自定义样式表并且是主要入口点。 var 目录包含缓存文件,每个应用程序根据其数据库设置而有所不同。 最后,您还拥有自定义参数文件,每个应用程序存储数据库凭据的文件不同。
我尝试了符号链接,但作曲家对此并不满意。此外,在使用符号链接时,工作目录始终是实际使用的目录,而不是您从中进行符号链接的实际目录。 我还尝试在应用程序的 vhost 文件中使用自定义设置。覆盖缓存和内核目录是可能的,但是您再次失去了您正在符号链接的实际目录。
【问题讨论】:
-
只是一个想法:Opcache 使用真实路径,如果相同,您可以使用指向“父”的符号链接替换文件。在作曲家安装后编写脚本,您可能可以从中解脱...
-
是的,我试过了。但是,composer 不支持供应商目录由多个应用程序符号链接。它将路径保存在其中一个自动加载器中的某处。
-
我不是指供应商文件夹,而是包中的代码。而不是包,而是在该级别下所有相同的文件。 Linke 递归比较两个目录树,如果文件相同,则用符号链接替换它。 opcache 然后将使用真实路径。这必须在脚本中完成,以便您可以通过清除供应商文件夹来重置,使用 composer 重新安装,然后重新运行比较和链接脚本。