Laravel 6.0で作成したテストプログラムをAWSにデプロイしてみたところRedisに関するエラーが出たので対応内容をメモしておきます。
環境
PHP:7.3.6
Laravel:6.0.3
発生したエラー
local.ERROR: Please remove or rename the Redis facade alias in your "app" configuration file in order to avoid collision with the PHP Redis extension.
「PHP Redis拡張モジュールとの衝突を避けるためRedisのファサードを削除するか名前を変えてください」ということなので、
素直にファサードの名前を変えたところ、エラーの内容が以下のように変わりました。
local.ERROR: Class 'Redis' not found
そりゃ名前を変えたから見つからないと言われて当然ですよね?
対応内容
ここからが対応内容になります。
PHP Redis拡張モジュールがインストールされているかどうか確認する
php -m
を実行しても一覧に表示されていないため、そもそもインストールされていないようでした。
yum を使ってRedis拡張モジュールをインストールする
$ sudo yum list | grep php73 | grep redis
php73-php-pecl-redis4.x86_64 4.3.0-1.el6.remi remi-safe
php73-php-pecl-redis5.x86_64 5.0.2-1.el6.remi remi-safe
php73-php-phpiredis.x86_64 1.0.0-10.el6.remi remi-safe
redis4 と redis5 がありますが redis5 の方をインストールしてみます。
インストールが完了して再度 php -m
を実行してみましたが一覧に表示されていません。
redis.so はどこにインストールされたのか
find コマンドで捜索してみたところ、以下のディレクトリに redis.so を発見しました。
$ sudo find / -name "redis.so"
/opt/remi/php73/root/usr/lib64/php/modules/redis.so
よくよく振り返ってみると、インストールしたRedis拡張モジュールは remi レポジトリのものでしたが、
既にインストールされている PHP本体は AWSのレポジトリのものでした。
つまりインストールされた拡張モジュールをPHPが認識できておりませんでした。
これはどちらかに統一せねばと思い、PHP本体に合わせることにしました。
yum を使って Redis拡張モジュールをインストールする(再挑戦)
インストールした remi レポジトリのRedis拡張モジュールはいったん削除し、
remi レポジトリを除いて、yum でインストールできるかどうか確認してみましたが、
PHP7.2まではあるのに、PHP7.3のものがない・・・。
$ sudo yum list --disablerepo=remi* | grep php | grep redis
php54-pecl-redis.x86_64 2.2.7-1.5.amzn1 amzn-main
php55-pecl-redis.x86_64 2.2.7-1.5.amzn1 amzn-main
php56-pecl-redis.x86_64 2.2.8-1.8.amzn1 amzn-main
php70-pecl-redis.x86_64 3.1.1-1.1.amzn1 amzn-main
php71-pecl-redis.x86_64 3.1.1-1.2.amzn1 amzn-main
php72-pecl-redis.x86_64 3.1.1-1.3.amzn1 amzn-updates
PECLをインストールする
yum でダメなら PECL をインストールして、PECLでRedis拡張をインストールすることにしました。
php73-pear はありませんが、 php7-pear というのがPHP7.x用らしいのでこちらをインストールします。
$ sudo yum install php7-pear
インストールが完了し pecl7 というコマンドが使えるようになりました。
PECL を使って Redis拡張モジュールをインストールする
$ sudo pecl7 install redis
(省略)
Build process completed successfully
Installing '/usr/lib64/php/7.3/modules/redis.so'
install ok: channel://pecl.php.net/redis-5.0.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=redis.so" to php.ini
php.ini に記述を追加しろとありますが、他の拡張モジュール同様 .ini ファイルを作成して読み込ませることで対応しました。
extension=redis.so
まとめ
Redis拡張モジュールがちゃんとインストールされていれば、ファサードの名称は変えなくても問題ないようです。