Som*_*ody 2 php preload symfony php-7.4
我在不同的子域上有 2 个单独的 Symfony 安装。
但是,当我尝试访问第二个域时,它说:
致命错误:无法在 /var/www/public_test_api 中重新声明 Symfony\Component\String\u()(之前在 /var/www/public_api/releases/20200904200316/vendor/symfony/string/Resources/functions.php:14 中声明) /releases/20200909003532/vendor/symfony/string/Resources/functions.php 第 14 行
注意冲突是在不同的目录之间,相互之间没有任何关系。
这是缓存问题吗?我该如何解决这个问题?我试图为第二次安装禁用 OPCache,但它没有改变任何东西。APCu 也已启用。
我也遇到了同样使用 Symfony 的 3rd 方软件的问题。
禁用opcache.preload设置似乎摆脱了这个问题。
有没有办法在同一台服务器上运行所有这些应用程序并从预加载中受益?
您不能对在同一服务器中多次使用的类使用预加载。
预加载通过读取 中指定的文件将相关定义保留在内存中opcache.preload。如果您预加载一个 Symfony 实例,然后尝试加载另一个 Symfony 实例,您将遇到定义冲突(因为它发生在您身上)。
实际上,为了能够从预加载中受益,您需要拥有隔离的“专用”服务器,即使这些服务器不是物理机而是虚拟机或容器。
[...] 这种方法将与托管多个应用程序或多个应用程序版本的服务器不兼容——对于某些同名的类会有不同的实现——如果这些类是从一个应用程序的代码库中预加载的,它将与从其他应用程序加载不同的类实现冲突。
TLDR;您不能在同一台服务器上为同一类的多个实例使用预加载。您必须关闭预加载,或者将每个应用程序移动到其自己的专用容器中,它们不会共享 PHP-FPM 进程。
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |