LogicException:请确保已安装并启用 PHP Redis 扩展
Posted
技术标签:
【中文标题】LogicException:请确保已安装并启用 PHP Redis 扩展【英文标题】:LogicException: Please make sure the PHP Redis extension is installed and enabled 【发布时间】:2020-07-24 20:20:03 【问题描述】:Laravel 版本:7.5.0 php版本:7.2 数据库驱动和版本:Redis
一切正常,但突然出现此错误,我将 phpredis 更改为 predis,但错误相同。
复制步骤:
我正在调用事件函数event(new ChatsEvent($data));
LogicException: Please make sure the PHP Redis extension is installed and enabled. in /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:76
Stack trace:
#0 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Support/helpers.php(428): Illuminate\Redis\Connectors\PhpRedisConnector->Illuminate\Redis\Connectors\closure(Object(Illuminate\Support\Facades\Redis))
#1 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(104): tap(Object(Illuminate\Support\Facades\Redis), Object(Closure))
#2 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(27): Illuminate\Redis\Connectors\PhpRedisConnector->createClient(Array)
#3 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(31): Illuminate\Redis\Connectors\PhpRedisConnector->Illuminate\Redis\Connectors\closure()
#4 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(111): Illuminate\Redis\Connectors\PhpRedisConnector->connect(Array, Array)
#5 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(90): Illuminate\Redis\RedisManager->resolve('default')
#6 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php(108): Illuminate\Redis\RedisManager->connection('default')
#7 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php(64): Illuminate\Broadcasting\Broadcasters\RedisBroadcaster->broadcast(Array, 'ChatsEvent', Array)
#8 [internal function]: Illuminate\Broadcasting\BroadcastEvent->handle(Object(Illuminate\Broadcasting\Broadcasters\RedisBroadcaster))
#9 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#10 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate\Container\BoundMethod::Illuminate\Container\closure()
#11 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#12 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#13 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#14 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#15 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\closure(Object(Illuminate\Broadcasting\BroadcastEvent))
#16 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Broadcasting\BroadcastEvent))
#17 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#18 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(83): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Broadcasting\BroadcastEvent), false)
#19 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\closure(Object(Illuminate\Broadcasting\BroadcastEvent))
#20 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Broadcasting\BroadcastEvent))
#21 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(85): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#22 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(59): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\DatabaseJob), Object(Illuminate\Broadcasting\BroadcastEvent))
#23 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob), Array)
#24 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(356): Illuminate\Queue\Jobs\Job->fire()
#25 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(306): Illuminate\Queue\Worker->process('database', Object(Illuminate\Queue\Jobs\DatabaseJob), Object(Illuminate\Queue\WorkerOptions))
#26 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(132): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\DatabaseJob), 'database', Object(Illuminate\Queue\WorkerOptions))
#27 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate\Queue\Worker->daemon('database', 'default', Object(Illuminate\Queue\WorkerOptions))
#28 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(96): Illuminate\Queue\Console\WorkCommand->runWorker('database', 'default')
#29 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
#30 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#31 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate\Container\BoundMethod::Illuminate\Container\closure()
#32 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#33 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#34 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#35 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\Container\Container->call(Array)
#36 /home/user/public_html/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#37 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#38 /home/user/public_html/vendor/symfony/console/Application.php(912): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#39 /home/user/public_html/vendor/symfony/console/Application.php(264): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#40 /home/user/public_html/vendor/symfony/console/Application.php(140): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#41 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#42 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#43 /home/user/public_html/artisan(36): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#44 main
【问题讨论】:
我也遇到了同样的事情!应用程序运行良好数周,包括 Redis 设置属性,今天早上突然:LogicException Please make sure the PHP Redis extension is installed and enabled.
你是如何解决的?您的错误是否也突然发生了?
【参考方案1】:
如果您使用composer require predis/predis
安装 Redis,则需要将此行添加到.env
文件中:
REDIS_CLIENT=predis
然后通过运行以下命令清除缓存:php artisan optimize:clear
An additional way
你可以在config/database.php
文件中更改这一行:
发件人:
'client' => env('REDIS_CLIENT', 'phpredis'),
收件人:
'client' => env('REDIS_CLIENT', 'predis'),
然后通过运行以下命令清除缓存:php artisan optimize:clear
【讨论】:
或者您可以将 REDIS_CLIENT=predis 添加到您的 .env 文件中 这对我有用 编辑config/database.php
解决了我的问题。【参考方案2】:
缺少 PHP redis 扩展。
有两种方式:
-
安装php redis扩展(回答https://***.com/a/61325340/3578207)
将驱动程序更改为 predis(.env 中的
REDIS_CLIENT
)并安装 predis composer 包(composer require predis/predis
)。
但是predis
比phpredis
慢一点。
P.S.:(对于方式 1):安装 phpredis 扩展后,您需要将其添加到 composer.json
到 require
部分,作为 "ext-redis": "*"
进行正确部署。见composer platform requirements。
【讨论】:
我正在使用 windows 机器,无法运行 pecl install redis .getting 错误注意:尝试访问第 186 行 PEAR\REST.php 中 bool 类型值的数组偏移量 没有可用于包的版本“ pecl.php.net/redis" 安装失败 @zlodes 非常感谢。"ext-redis": "*"
是我的问题的解决方案。但是你能解释一下为什么需要这样做吗?我已经通过pecl
安装了redis
并将extension="redis.so"
添加到我的php.ini
。我总是收到错误Please make sure Redis is installed
。任何想法?我只是想了解问题。【参考方案3】:
对于我来说,我只是在下面的 ubuntu 服务器中安装 php 扩展
sudo apt-get install php-redis
【讨论】:
单一的正常答案【参考方案4】:如果您在 Windows 中,请使用此 composer require predis/predis
命令添加 predis 的依赖项。
然后像这样配置你的 .env 文件
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
我正在使用 redis 来排队我的邮件。所以我设置了 QUEUE_CONNECTION=redis
和 REDIS_CLIENT=predis
。当你在本地开发时这很好用。在生产中它相同但有点不同
【讨论】:
请注意这是predis
(用PHP编写的PHP包)而不是PhpRedis
(用C编写),它比predis
更快。【参考方案5】:
老兄,我有一些问题,但我已经解决了这个问题。尝试学习(我的操作系统是 Linux):
第 1 步:安装 PhpRedis 为了安装最新版本的 PhpRedis 扩展,我们可以使用 pecl。要安装 pecl,您需要安装 PHP Extension and Application Repository 或简称 PEAR:
sudo apt install php-pear
第 2 步:然后您可能还需要安装 PHP 开发工具:
sudo apt install php-dev
第 3 步:然后我们希望继续在此处安装此软件包。为此,只需运行:
sudo pecl install redis
最后:确保通过在 php.ini 中添加以下行来启用新的 PHP 扩展,如果找不到此脚本,则可以在所有列表下编写此脚本extension=
extension = redis.io
不要忘记通过以下方式重新启动您的 apache2 服务:
sudo service apache2 restart
祝你好运!
【讨论】:
在运行sudo pecl install redis
后,有一个描述说你必须添加extension=redis.so 但在你的回答中它是redis.io
,@ 之间有什么区别987654329@ 和 extension=redis.so
?【参考方案6】:
如果您使用的是 heroku,请将其添加到您的要求中:
"ext-redis": "*",
【讨论】:
【参考方案7】:我总是在像这样安装php7.x-dev
时遇到麻烦
The following packages have unmet dependencies:
php7.3-dev : Depends: libpcre2-dev (>= 10.30) but it is not going to be installed
Depends: libssl-dev but it is not going to be installed
Depends: php7.3-common (= 7.3.11-0ubuntu0.19.10.6) but 7.3.20-1+ubuntu19.10.1+deb.sury.org+1 is to be installed
Recommends: pkg-php-tools but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
所以我跳过php7.x-dev
安装并直接转到sudo pecl install redis
然后我得到了新的错误:
sh: 1: phpize: not found
ERROR: `phpize' failed
我最终搜索安装phpize
,解决方案是安装php-dev
。
对于那些像我一样有类似问题的人。而不是sudo apt-get install php7.x-dev
使用sudo aptitude install php7.x-dev
安装 aptitude
sudo apt-get update
sudo apt-get install aptitude
然后运行sudo apt-install php7.x-dev
,然后如果提示询问您是否要将以下软件包保留为当前版本:
选择NO这将自动降级或升级版本以安装php7.x-dev
。
下一步安装redis:
sudo pecl install --force redis
注意:–force 标志确保添加扩展名,而不管 任何可能阻止安装的缓存设置。
那么您应该将"extension=redis.so"
添加到php.ini。在我的例子中 php.ini 位于/etc/php/7.3/apache2/php.ini
并通过运行以下命令重新启动 apache2:
sudo service apache2 restart
如果你还没有安装php-fpm
运行这个命令。
sudo apt install php7.3-fpm
注意:您需要重启php artisan serve
。这是因为即使您成功安装了包(redis,php-dev),laravel 也不会识别 PHP Redis,所以请记住重新启动 php artisan serve。
【讨论】:
【参考方案8】:万一有人偶然发现了这一点。我只需在基于 Debian 的 Linux 发行版(基本操作系统)上安装 php-redis
即可解决此问题。
【讨论】:
【参考方案9】:我从Laravel 5.2
升级到Laravel 8
旧的laravel 5.2
设置是
'redis' => [
'cluster' => false,
'default' => [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],
Laravel 8
的设置现在可以正常工作了
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
],
【讨论】:
【参考方案10】:如果你使用 Laravel 更新版本 ~8 THEN:
您必须更改 2 个文件:
文件 1: 在 /bootstrap/cache/config.php 中将 'phpredis' 替换为 'predis'
'redis' =>
array (
'client' => 'predis', //you might have 'phpredis'
文件 2: 在 /config/database.php 中将 'phpredis' 替换为 'predis'
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
我的问题就这样解决了
【讨论】:
以上是关于LogicException:请确保已安装并启用 PHP Redis 扩展的主要内容,如果未能解决你的问题,请参考以下文章
安装WIN7提示,硬盘不支持启动磁盘,请确保BIOS菜单中磁盘控制器启用
我是索尼笔记本电脑,装系统提示“硬盘不支持启动磁盘,请确保BIOS菜单中磁盘控制器启用
如何解决这个问题:“请确保在“Internet”选项控制面板中已启用SSL 3.0或TLS 1.0”???