Невозможно использовать EVAL с redis-cluster - PullRequest
0 голосов
/ 03 февраля 2020

Redis работал нормально на локальной машине, но на производстве выдает ошибку. На локальной машине я использовал ту же конфигурацию.

Пытался часами, но все еще не мог решить проблему.

Производственная среда:

Ubuntu
Stack : Laravel, Redis, Laravel echo server

config / database. php

 'redis' => [

        'client' => 'predis',
        'cluster' => false,
        'default' => [
                [
                    'host' => env('REDIS_HOST', '127.0.0.1'),
                    'password' => env('REDIS_PASSWORD', null),
                    'port' => env('REDIS_PORT', 6379),
                    'database' => 0,
                ],
            ],

    ],

.env file

BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
SESSION_DRIVER=file

Ошибка:

Cannot use 'EVAL' with redis-cluster. {"exception":"[object] (Predis\\NotSupportedException(code: 0): Cannot use 'EVAL' with redis-cluster. at /var/www/html/mayaapi/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:380)
[stacktrace]
#0 /var/www/html/mayaapi/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(550): Predis\\Connection\\Aggregate\\RedisCluster->getConnection(Object(Predis\\Command\\ServerEval))
#1 /var/www/html/mayaapi/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(593): Predis\\Connection\\Aggregate\\RedisCluster->retryCommandOnFailure(Object(Predis\\Command\\ServerEval), 'executeCommand')
#2 /var/www/html/mayaapi/vendor/predis/predis/src/Client.php(331): Predis\\Connection\\Aggregate\\RedisCluster->executeCommand(Object(Predis\\Command\\ServerEval))
#3 /var/www/html/mayaapi/vendor/predis/predis/src/Client.php(314): Predis\\Client->executeCommand(Object(Predis\\Command\\ServerEval))
#4 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(96): Predis\\Client->__call('eval', Array)
#5 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(108): Illuminate\\Redis\\Connections\\Connection->command('eval', Array)
#6 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php(204): Illuminate\\Redis\\Connections\\Connection->__call('eval', Array)
#7 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php(187): Illuminate\\Queue\\RedisQueue->migrateExpiredJobs('queues:default:...', 'queues:default')
#8 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php(163): Illuminate\\Queue\\RedisQueue->migrate('queues:default')
#9 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(246): Illuminate\\Queue\\RedisQueue->pop('default')
#10 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(107): Illuminate\\Queue\\Worker->getNextJob(Object(Illuminate\\Queue\\RedisQueue), 'default')
#11 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\\Queue\\Worker->daemon('redis', 'default', Object(Illuminate\\Queue\\WorkerOptions))
#12 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): Illuminate\\Queue\\Console\\WorkCommand->runWorker('redis', 'default')
#13 [internal function]: Illuminate\\Queue\\Console\\WorkCommand->handle()
#14 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#15 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#16 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#17 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#18 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Console/Command.php(179): Illuminate\\Container\\Container->call(Array)
#19 /var/www/html/mayaapi/vendor/symfony/console/Command/Command.php(255): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#20 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Console/Command.php(166): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#21 /var/www/html/mayaapi/vendor/symfony/console/Application.php(1012): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#22 /var/www/html/mayaapi/vendor/symfony/console/Application.php(272): Symfony\\Component\\Console\\Application->doRunCommand(Object(Illuminate\\Queue\\Console\\WorkCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#23 /var/www/html/mayaapi/vendor/symfony/console/Application.php(148): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#24 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#25 /var/www/html/mayaapi/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#26 /var/www/html/mayaapi/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#27 {main}
"} 

1 Ответ

1 голос
/ 03 февраля 2020

Попробуйте добавить ha sh -tags (оборачивая строку с константой {}) в имя своей очереди в файле config/queue.php.

'queue.connections.redis.queue' => '{default}'

Если вы используете другие очереди, кроме стандартных, вместо OnQueue('myQueue') меняют его везде на OnQueue('{myQueue}').

Даже если вы не используете кластер, вероятно, predis проверяет, все ли ключи, переданные в сценарий Lua, находятся на тот же узел.

...