Я делаю некоторое очищение кэша Varnish, которое работает само по себе, но не работает при использовании Resque.
Это работает:
... // lots of code
$cacheManager = $container->get('cachemanager');
$cacheTags = [...]; //array with tags
$cacheManager->ban($cacheTags);
Так что в том же месте я сделал это:
$job = CacheJob::create($banTags);
$queueService = $container->get('bcc_resque.resque'); //The resque bundle for symfony
$queueService->enqueue($job);
И класс CacheJob выглядит следующим образом:
используйте BCC \ ResqueBundle \ ContainerAwareJob в качестве BaseJob;
class CacheJob extends BCC\ResqueBundle\ContainerAwareJob
{
public $args;
public static function create(array $cacheTags): self
{
$job = new self();
$job->args = array(
'cacheTags' => $cacheTags
);
return $job;
}
public function run($args)
{
$banTags = $args['cacheTags'];
$container = $this->getContainer();
$cacheManager = $container->get('cachemanager');
$cacheManager->purgeTags($banTags);
}
}
Так что это буквально то же самое, что работало до, просто поставил в очередь.
Я смотрю журнал Resque, а также веб-интерфейс, и оба говорят, что работа была выполнена. Переменная в $ args содержит ожидаемые теги ... но запрет никогда не поступает в Varnishlog, как это происходит при постановке в очередь.
Кто-нибудь знает, почему, или хотя бы как отладить его дальше?