laravel - 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 Horizon 来监控我的 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
当我访问我的 Horizon 仪表板时,我发现 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模块。所以不知道为什么我会收到提到的异常,这会阻止我的队列被执行。
解决方案
问题归结为没有将Laradock 的.env文件中PHP_WORKER部分下的Bcmath模块设置为true。首先,该模块必须安装在您的工作区中,然后在PHP_FPM和PHP_WORKER部分下打开它。我的错误是我只在 PHP_FPM 部分下设置了 true所以必须在PHP_WORKER部分下做同样的事情
推荐阅读
- artificial-intelligence - 暗网不使用 p5000 gpu 和 cuda
- azure-service-fabric - 通过 ARM 模板删除 Service Fabric 服务
- python - python 正则表达式中负后向限制的解决方法
- r - 将日期从 2020 年 5 月 31 日转换为 R 中的时间序列数据
- apache-spark - 如何将数据推送到凤凰是块
- shopify - 在 Shopify 中拆分 srcl URL
- sql - 如何在 Snowflake 中连接来自不同数据库的表?
- vb.net - 每日获取 :: SecurityTokenSignatureKeyNotFoundException: IDX10501: 签名验证失败。无法匹配键:
- loops - 为什么当我输入“停止”时循环不中断
- python - 具有组条件的熊猫自定义聚合函数,这可能吗?