在将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的名称也没有问题。

广告
将在 10 秒后关闭
bannerAds