【问题标题】:Laravel/docker-compose/redis - Class 'Redis' not foundLaravel/docker-compose/redis - 找不到类“Redis”
【发布时间】:2020-06-16 19:38:27
【问题描述】:

这个项目是由另一个团队建立的,我无法通过这个错误。使用 PHP 7.2 和 Laravel 6.2。我的docker-compose.yml

redis:
    image: redis
    command: ["redis-server", "--appendonly", "yes","--requirepass","Redis.123"]
    volumes:
      - redis-data:/data
    container_name: redis-master
    ports:
      - "6379:6379"

database.php:

'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ],

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ]

容器已启动并正在运行,并且“准备好接受连接”。如果我尝试访问基本 url 或任何端点,这个错误就会出现在我的堆栈跟踪中。正如其他人推荐的那样,我在app.php:'RedisManager' => Illuminate\Support\Facades\Redis::class, 中为 redis 起了别名。任何人都可以看到任何明显的缺失或可能导致这种情况的东西吗? Predis 安装在composer.json:"predis/predis": "^1.1",,但没有在配置中设置。如果我将 phpredis 更改为 predis,我会收到错误 development.ERROR:SELECTfailed: NOAUTH Authentication required. [tcp://127.0.0.1:6379]

【问题讨论】:

    标签: php laravel redis docker-compose laravel-6.2


    【解决方案1】:

    设置为phpredis时出现的错误,很可能与phpredis扩展有关。如果你想使用phpredis客户端,你需要安装这个扩展。

    将其设置为predis 时得到的错误完全不同。这是身份验证错误,因为您没有设置密码。在您的 .env 文件中,附加此

    REDIS_PASSWORD=Redis.123
    

    然后artisan config:clear,它可以完成工作。

    【讨论】:

    • 我正在为我的 .env 使用 envkey 并且其中的 REDIS_PASSWORD 为空,所以我猜测 phpredis 是有意的。我检查了一下,我的 php.ini 中有 redis 正确:php -r "if (new Redis() == true){ echo \"\r\n OK \r\n\"; }" 返回 OK 并且 php -i | grep Redis 看起来也不错:Redis Support => enabled Redis Version => 5.2.2 Redis Sentinel Version => 0.1。我的 php7.2.ini 顶部还有 extension="redis.so",并使用 brew services restart php@7.2 重新启动了 php7.2。
    • 如果您使用我在答案中提供的设置密码将phpredis 设置为REDIS_CLIENT,会发生什么?你有任何错误或它有效吗? @MattLarson
    • 我最终完全重启并且 phpredis 正在工作,但最终还是需要 REDIS_PASSWORD,所以将其添加到 envkey。谢谢!
    猜你喜欢
    • 2019-02-05
    • 2021-07-09
    • 2021-03-02
    • 2016-05-22
    • 1970-01-01
    • 2021-12-16
    • 2021-12-01
    • 2015-04-30
    • 2020-12-18
    相关资源
    最近更新 更多