因此,从 symfony4 更新到 symfony6 后,我尝试在 preprod 服务器上部署,但效果不佳,因为我们的 Kernel.php 在 $_SERVER 全局变量中似乎不再有 GCP 变量。
这是我们的内核配置,我们在其中重写 getCacheDir 方法,以确定与 symfony4 一起使用的缓存路径。
public function getCacheDir(): string
{
if ($this->onAppEngine())
return "/tmp/" . $this->environment . '/cache';
return $this->getProjectDir() . '/var/cache/' . $this->environment;
}
private function onAppEngine(): bool
{
return isset($_SERVER['GAE_INSTANCE']);
}
首先要提到的是,如果我删除我的条件(即直接在 getCacheDir 中返回 /tmp 路径),一切都会正常工作(但这在开发环境中不起作用,因为它不是缓存的正确路径在开发中)所以我很确定(但我可能是错的)我想要的 $server var 不再被填充。
所以这种行为真的很奇怪,我不得不提的是我们的网站是多语言的。当我在重定向到本地化 url 之前到达基本 url (example.com) 时,我尝试放置一个转储($server["gae_instance"]),在这里,我可以看到我们确实有 $_server var (我在重定向之前看到了转储的 $_SERVER['GAE_INSTANCE'] 的值)
所以知道,似乎我们在第一个请求(example.com)上确实有 $_SERVER GAE_INSTANCE 但一旦重定向(到 example.com/fr)它就不再存在(给出了错误的缓存路径,我得到错误)
我确实认为这是 symfony4 和 symfony6 之间的变化,因为我们没有对 gcp 进行任何更改(除了应用程序的 php 版本,但我们从 php7.4 传递到 php8.1 并且在 google 文档中,它似乎不会影响某些内容 https://cloud.google.com/appengine/docs/standard/php-gen2/runtime?hl=fr#php-8.1)
我必须提到,我们曾经有一个翻译包(jmsi18n),我删除了,因为我们现在使用 symfony 翻译包,(我真的不认为这是问题的根源,但我不认为想要错过一些东西。)
####编辑####
这里有一些测试代码和生成的日志(我尝试过 print_r 和 syslog 因为我不确定哪个正在记录)
首先,我尝试无条件返回缓存目录,并且有许多日志要逐步遵循,一切似乎都正常,所有预期的日志都已发送(并且网站正在运行)
然后我尝试了相同的代码(带有一些附加日志),但在条件中返回,即使我们输入条件,错误也会附加,它变得非常奇怪,它可能是链接的,但内核是一个请求多次触发(并且 gcp 日志显示 /fr 上有两个 500 请求,但我们每次都会传递所有预期条件)
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号