gpt4 book ai didi

symfony - 手动重新编译 Symfony 容器

转载 作者:行者123 更新时间:2023-12-02 20:26:12 24 4
gpt4 key购买 nike

我正在尝试创建一个 dockerized symfony 应用程序。问题是 DI 容器是在 Docker 容器构建期间构建的,这意味着我无法真正将运行时参数注入(inject)其中。到目前为止,我的解决方案是清除容器入口点中的缓存,但我意识到在某些情况下这可能是一个相当繁重的操作,因此我根据内核的启动函数在AppKernel中创建了一个自定义编译函数:

/**
* Recompiles the container without warming up the whole cache.
*
* Can be called upon docker container start to inject custom parameters.
*/
public function compile()
{
// Load class cache
if ($this->loadClassCache) {
$this->doLoadClassCache($this->loadClassCache[0], $this->loadClassCache[1]);
}

// Initialize bundles to be able to parse configurations
$this->initializeBundles();

$class = $this->getContainerClass();
$cache = new ConfigCache($this->getCacheDir().'/'.$class.'.php', $this->debug);

$container = $this->buildContainer();
$container->compile();
$this->dumpContainer($cache, $container, $class, $this->getContainerBaseClass());
}

现在将在每个 Docker 容器启动时调用此函数(在应用程序启动之前)。

这是一个安全的操作吗?我是否应该假设任何缓存预热器都可能依赖于容器参数? (由于我只更改运行时的容器参数,因此服务和其他所有内容都应保持不变)。

最初在 symfony 存储库问题中提出:https://github.com/symfony/symfony/issues/19525

PR 到我的自定义存储库:https://github.com/webplates/symfony-standard/pull/42

最佳答案

这个问题不能笼统地回答,这完全取决于您使用的包和更改的参数。例如,如果你的路由依赖于一个参数(例如在路由上设置主机),仅重建容器不够,需要预热来重建路由。

关于symfony - 手动重新编译 Symfony 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com