【发布时间】:2016-02-19 17:01:09
【问题描述】:
我在 Symfony 2 应用程序中的一个包有一个自定义缓存预热器。
当从控制台运行并在开发模式下,它会向标准输出写入一个通知,告知它已被调用。
有时,并非总是如此,它会为单个控制台缓存多次调用:clear 命令,这可以从多个通知写入标准输出中得到证明。
有人能解释一下为什么会这样吗?正常吗?是否所有缓存预热器都被多次调用?
环境:
- Ubuntu 14.04.3
- PHP 7.0.2-4
- Symfony 2.7.9
----- 编辑 21-Feb-2016 08:36 --------
由于各种原因(大小、NDA 等),通过实际来源发布是不切实际的。所以,我创建了一个带有缓存预热器的小包,它在调用时只是回显其类名。
正如您在下面的输出中看到的,它被调用了两次。
//
// The cache warmer.
//
namespace SoBundle\Listener;
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface;
class CacheWarmer implements CacheWarmerInterface
{
public function isOptional()
{
return false;
}
public function warmUp( $cacheDir )
{
echo __CLASS__ . '()' . PHP_EOL;
}
}
#
# The service definition.
#
services:
so.cache_warmer:
class: SoBundle\Listener\CacheWarmer
tags:
- { name: kernel.cache_warmer }
#
# Clearing the cache...
#
$ console cache:clear
Clearing the cache for the dev environment with debug true
SoBundle\Listener\CacheWarmer()
SoBundle\Listener\CacheWarmer()
【问题讨论】:
-
如果没有捆绑包自定义缓存预热器代码,无法帮助您...
-
你到底为什么需要我更温暖的源代码。它实现了标准的东西:isOptional() 返回 false。 warmUp() 构建我的缓存。然后,当然还有服务定义,它指定类名、构造函数参数和 kernel.cache_warmer 作为名称标签的值。
-
发布您的代码和您的尝试。它是您的自定义缓存加热器吗?它来自第 3 方捆绑包吗?您是否发现了任何特定情况下多次调用它而不是其他情况?如果您正在寻求帮助,请通过提供更多详细信息来帮助我们帮助您。
-
好的。我已经发布了代码。
-
几个月前我遇到了这个问题,并找到了对此行为的解释,但是......我不记得了。我会为您的问题添加书签,如果我记得它是什么,我会提供并回答:)。