Сериализация параметров кластеризации Predis для PHPUnit - PullRequest
0 голосов
/ 10 сентября 2018

Я получал следующее сообщение: Serialization of Closure is not allowed при попытке выполнить phpunit.Мне предложили установить SuperClosure\Serializer и сериализовать функцию закрытия. Я сделал это, и теперь он ломается, потому что Predis Cluster Options constructor должен быть либо вызываемой функцией, либо строкой значения redis или predis, поэтому сериализация ломает опции строковых параметров

Вот мой код

// load redis cluster
use Selector\Cache\Redis\ClusterClient as SelectorRedisClusterClient;
use Selector\Cache\Redis\NaiveDistributor as SelectorNaiveDistributor;
use Selector\Cache\Redis\PredisCluster as SelectorPredisCluster;
use Selector\Cache\Redis\PredisStrategy as SelectorPredisStrategy;
use SuperClosure\Serializer;
$serializer = new Serializer();
$clusterFunc = function() {
    $distributor = new SelectorNaiveDistributor();
    $strategy = new SelectorPredisStrategy($distributor);
    $cluster = new SelectorPredisCluster($strategy);
    return $cluster;
};
$clusterFuncSer = $serializer->serialize($clusterFunc);
$options = array(
    //'cluster' => function () {
     //   $distributor = new SelectorNaiveDistributor();
     //   $strategy = new SelectorPredisStrategy($distributor);
     //   $cluster = new SelectorPredisCluster($strategy);    
     //   return $cluster;
    //}
    'cluster'=>$clusterFuncSer
);
$redisServerData=$buildData['cache']['redis']['server'];
if(!\Selector\Zf\Stdlib\ArrayUtils::isList($redisServerData)){
    $tmp=[[
    'host'=>$redisServerData['host'],
    'port'=>$redisServerData['port'],
    'database'=>$redisServerData['database'],
    'alias'=>$redisServerData['alias'],
    ]];
    $redisServerData=$tmp;
}
$redis = new SelectorRedisClusterClient($redisServerData,$options);

Новая ошибка:

Fatal error: Uncaught InvalidArgumentException: String value for the cluster option must be either predis or redis in /srv/awsconnect/connect/vendor/predis/predis/src/Configuration/Option/Cluster.php:45

Так что похоже на сериализацию функции в строку, но затемRedis Client ломается, так как ищет массив, как я, или строку со значением redis или predis

Не уверен, что здесь делать.

...