Redis connection [auth] not configured
1. 运行环境
1). 当前使用的 Laravel 版本?
Laravel Framework Lumen (10.0.1)
//: <> (使用 php artisan --version
命令查看)
2). 当前使用的 php/php-fpm 版本?
PHP 版本:PHP 8.2.12
php-fpm 版本:8.2.12-1.el9.remi
3). 当前系统
CentOS Stream 9
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )
4). 业务环境
开发环境
//: <> (期待信息 开发环境
或 生产环境
)
//: <> (是否使用负载均衡?请提供相关信息)
5). 相关软件版本
nginx.x86_64 1:1.22.1-2.el9
2. 问题描述?
为了避免不同功能的缓存全部混在一起相互干扰,我为登录相关验证的缓存添加了一个新的redis配置,在Console中创建了一个测试命令,是可以正常操作redis的,但到了浏览器中就显示redis的连接没有配置
一开始我以为是配置文件格式有问题,但编写了一个Console Command测试时成功操作了redis,所以格式应该是正确的,但在curl请求和浏览器里请求时都会报错,所以现在怀疑是cli模式和http请求时有什么加载上的差异,希望得到大佬们的指点,谢谢
配置文件(以从/vendor/laravel/lumen-framework/config/中提供的模板为基础修改而成)
cache.php
<?php
use Illuminate\Support\Str;
return [
'default' => env('CACHE_DRIVER', 'redis'),
'stores' => [
'redis' => [
'driver' => 'redis',
'connection' => env('CACHE_REDIS_CONNECTION', 'default'),
],
'auth' => [
'driver' => 'redis',
'connection' => 'auth',
]
],
];
database.php
<?php
use Illuminate\Support\Str;
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', 3306),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => env('DB_PREFIX', ''),
'strict' => env('DB_STRICT_MODE', true),
'engine' => env('DB_ENGINE'),
'timezone' => env('DB_TIMEZONE', '+00:00'),
],
],
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'default' => [
//'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => 0,
],
'auth' => [
//'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => 1,
],
],
];
调用的代码
<?php
namespace App\Http\Controllers;
class Auth extends Controller
{
public function sms(\App\Http\Inputs\Sms $in)
{
var_dump(\Illuminate\Support\Facades\Redis::connection('auth')); exit;
}
}
3. 您期望得到的结果?
4. 您实际得到的结果?
curl命令输出最后一行:
Redis connection [auth] not configured. (500 Internal Server Error)
报错日志:
[2023-12-18 05:03:42] local.ERROR: Redis connection [auth] not configured. {"exception":"[object] (InvalidArgumentException(code: 0): Redis connection [auth] not configured. at /var/work/monkesky/lumen/vendor/illuminate/redis/RedisManager.php:120)
[stacktrace]
#0 /var/work/xxx/lumen/vendor/illuminate/redis/RedisManager.php(91): Illuminate\\Redis\\RedisManager->resolve()
#1 /var/work/xxx/lumen/vendor/illuminate/support/Facades/Facade.php(353): Illuminate\\Redis\\RedisManager->connection()
#2 /var/work/xxx/lumen/app/Http/Controllers/Auth.php(8): Illuminate\\Support\\Facades\\Facade::__callStatic()
#3 /var/work/xxx/lumen/vendor/illuminate/container/BoundMethod.php(36): App\\Http\\Controllers\\Auth->sms()
#4 /var/work/xxx/lumen/vendor/illuminate/container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#5 /var/work/xxx/lumen/vendor/illuminate/container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#6 /var/work/xxx/lumen/vendor/illuminate/container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod()
#7 /var/work/xxx/lumen/vendor/illuminate/container/Container.php(662): Illuminate\\Container\\BoundMethod::call()
#8 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(391): Illuminate\\Container\\Container->call()
#9 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(356): Laravel\\Lumen\\Application->callControllerCallable()
#10 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(331): Laravel\\Lumen\\Application->callLumenController()
#11 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(284): Laravel\\Lumen\\Application->callControllerAction()
#12 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(269): Laravel\\Lumen\\Application->callActionOnArrayBasedRoute()
#13 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(171): Laravel\\Lumen\\Application->handleFoundRoute()
#14 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(48): Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}()
#15 /var/work/xxx/lumen/app/Http/Middleware/Cors.php(22): Laravel\\Lumen\\Routing\\Pipeline->Laravel\\Lumen\\Routing\\{closure}()
#16 /var/work/xxx/lumen/vendor/illuminate/pipeline/Pipeline.php(180): App\\Http\\Middleware\\Cors->handle()
#17 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#18 /var/work/xxx/lumen/vendor/illuminate/pipeline/Pipeline.php(116): Laravel\\Lumen\\Routing\\Pipeline->Laravel\\Lumen\\Routing\\{closure}()
#19 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(428): Illuminate\\Pipeline\\Pipeline->then()
#20 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(167): Laravel\\Lumen\\Application->sendThroughPipeline()
#21 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(112): Laravel\\Lumen\\Application->dispatch()
#22 /var/work/xxx/lumen/public/index.php(28): Laravel\\Lumen\\Application->run()
#23 {main}
"}
感谢各位大佬的帮助,问题已经解决了,解决方式是在 bootstrap/app.php 中添加 $app->configure('database'); $app->configure('cache'); 这样两行,虽然错误很低级,但我姑且也写一下最终发现问题的排错思路,以期类似的排错思路能在某些情况下帮助各位同行解决其它的问题:报错信息是auth not configured,我就想着把当前的配置打印出来看一下,var_dump(config('database'))显示是null,而在Console中显示出了不一样的结果(即实际的配置值),所以猜想Console和http中获取配置的策略有区别,Console是加载全部有效的配置文件,而http中为了运行效率,只加载bootstrap/app.php中显示指定的配置文件,所以我加上了上面提到的两行,再运行就正常了