在将Laravel部署到AWS时遇到错误时的处理方法
我试图将使用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 扩展模块,然后尝试通过 yum 来安装,排除了 remi 仓库,但是发现 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扩展模块已经正确安装,看来不需要改变Facade的名称也没有问题。