首页 > 解决方案 > Laradock - 运行 Redis 队列,主管抛出错误 - 调用未定义函数 Moontoast\Math\bcadd()

问题描述

我正在 Laradock 上运行一个 Laravel 项目。我有一个 Job 类来处理发送邮件的 Notification 类。Job 使用 Redis 作为队列驱动程序,一切都设置好了

我有主管所有的设置和工作。以下是我.conf在作业运行时由主管执行的文件:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan queue:work redis --sleep=3 --tries=5 --daemon
autostart=true
autorestart=true
numprocs=8
user=root
redirect_stderr=true
stdout_logfile=/var/www/worker.log

这是在 Laradock 的php-worker>supervisord.d目录中设置的。我还设置了 Laravel Horizo​​n 来监控我的 Redis 队列。当 Job 执行时,Supervisor 运行 Job,这在我worker.log的记录 Job 处理的文件中得到确认,如上述.conf文件中所定义,如下所示:

[2019-10-14 12:18:27][21] Processing: App\Jobs\NewStaffAdded
[2019-10-14 12:18:30][21] Processing: App\Jobs\NewStaffAdded
[2019-10-14 12:18:31][21] Processing: App\Jobs\NewStaffAdded
[2019-10-14 12:18:33][21] Processing: App\Jobs\NewStaffAdded
[2019-10-14 12:18:35][21] Processing: App\Jobs\NewStaffAdded

当我访问我的 Horizo​​n 仪表板时,我发现 Job 失败了。单击失败的作业以了解更多详细信息,我收到此异常:

Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined function Moontoast\Math\bcadd() in /var/www/vendor/moontoast/math/src/Moontoast/Math/BigNumber.php:506

寻找上述异常的可能解决方案,我看到原因是缺少 PHP 的Bcmath模块的建议,但我运行了以下命令并确认我有这个模块:

dpkg --list | grep -i bcmath

显示我的 PHP 版本(7.3)有Bcmath模块。所以不知道为什么我会收到提到的异常,这会阻止我的队列被执行。

标签: laravelpredislaradock

解决方案


问题归结为没有将Laradock 的.env文件中PHP_WORKER部分下的Bcmath模块设置为true。首先,该模块必须安装在您的工作区中,然后在PHP_FPMPHP_WORKER部分下打开它。我的错误是我只在 PHP_FPM 部分下设置了 true所以必须在PHP_WORKER部分下做同样的事情


推荐阅读