1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSにLaravelをデプロイしたらエラーが出たときの対応方法

Posted at

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 ファイルを作成して読み込ませることで対応しました。

/etc/php-7.3.d/50-redis.ini
extension=redis.so

まとめ

Redis拡張モジュールがちゃんとインストールされていれば、ファサードの名称は変えなくても問題ないようです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?