安装 Laravel Redis库后出现错误

目标

    LaravelのセッションをAWSのElastiCatcheで管理しようと思いpredis/predisをインストール後にローカルサーバを起動したときのエラーの解決方法をまとめる

进行环境

    ハードウェア環境
項目情報OSmacOS Catalina(10.15.5)ハードウェアMacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)プロセッサ2 GHz クアッドコアIntel Core i5メモリ32 GB 3733 MHz LPDDR4グラフィックスIntel Iris Plus Graphics 1536 MB
    ソフトウェア環境
項目情報備考PHP バージョン7.4.8Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールするLaravel バージョン6.Xcommposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行うMySQLバージョン8.0.19 for osx10.13 on x86_64Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

前提信息

    • 下記作業を実施時のライブラリのインストール後にブラウザに出たエラーを解決する。

Laravel キャッシュファイルをAWSのElasticCacheに保存する

今回問題になっているLaravelアプリはMacのローカルに直接作成したアプリである。Dockerなどは使用していない。

問題的发展过程

    1. 在应用程序目录下执行以下命令获取库。

$ composer require predis/predis

在应用程序目录下执行以下命令启动本地服务器。

$ php artisan serve

将该应用程序的.env文件中的SESSION_DRIVER=file更改为SESSION_DRIVER=redis。

访问以下网址。

http://127.0.0.1:8000/

有什麼疑慮?

?_Please_make_sure_the_PHP_Redis_extension_is_installed_and_enabled__と_ElastiCatche.png

问题的解决过程

    1. 在可能.env文件的SESSION_DRIVER=值为SESSION_DRIVER=redis时,如果没有安装PhpRedis PHP扩展,将会出现此错误。官方文档推荐在使用Redis时安装PhpRedis PHP扩展。

 

    1. 不过,只要安装了predis/predis库,应该可以正常工作,但按照建议安装PhpRedis PHP扩展可能会解决问题。

 

    1. 以下是在Mac本地安装PhpRedis PHP扩展的方法。

安装Mac上的PhpRedis PHP扩展

启动本地服务器并访问以下网址。

http://127.0.0.1:8000/

页面一直没有显示,并且返回以下错误。

Operation timed out

通过查看以下官方文档,发现在使用predis/predis库时,应将config/database.php文件中的redis数组的client键的第二个参数更改为’predis’。尽管已经安装了PhpRedis PHP扩展,但还是尝试了这个方法。

Laravel 6.x Redis

执行以下命令卸载PhpRedis PHP扩展。

$ pecl uninstall redis

执行以下命令以查找php.ini文件的位置。

$ php -r “echo phpinfo();” | grep “php.ini”

执行以下命令创建php.ini文件的备份。(以下命令指定了我的环境中php.ini文件的位置,请根据上面的命令输出指定php.ini的路径并创建备份。)

cp /usr/local/etc/php/7.4/php.ini /usr/local/etc/php/7.4/php.ini_org

执行以下命令打开php.ini文件。(以下命令指定了我的环境中php.ini文件的位置,请根据上面的命令输出指定php.ini的路径并打开文件。)

$ vi /usr/local/etc/php/7.4/php.ini

文件应该包含以下内容,将其注释掉并保存。

修正前
/usr/local/etc/php/7.4/php.ini
extension=”redis.so”

修正后
/usr/local/etc/php/7.4/php.ini
;extension=”redis.so”

在应用程序目录中执行以下命令以打开配置文件。

$ vi config/database.php

进行以下修改。

修正前
config/database.php
/*
|————————————————————————–
| Redis Databases
|————————————————————————–
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

‘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’),
],

],

修正后
config/database.php
/*
|————————————————————————–
| Redis Databases
|————————————————————————–
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

‘redis’ => [

/* 以下进行修改 */
‘client’ => env(‘REDIS_CLIENT’, ‘predis’),

‘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’),
],

],

尽管出现了其他错误,但之前的关于不存在的PhpRedis PHP扩展的错误已经消失。

广告
将在 10 秒后关闭
bannerAds