我们在Kubernetes为Laravel应用程序提供了两个不同的Pod,
- 一个在端口80上运行Apache,(CMD /usr/sbin/apache 2ctl-D前景)
- 和另一个正在运行的工人(Laravel地平线)(CMD php /var/www/工匠地平线)
问题是当我查看Horizon控制面板时,它显示“活动”,我可以在“待处理作业”部分看到作业,但它们实际上从未执行过,它们只是闲置在那里。
现在,当我在运行apache的pod中手动SSH并运行命令“php artisan horizon”时,它实际上执行了所有挂起的作业。
我已经确保了以下几点:
1.两个pod都连接到同一个Redis数据库服务
1.两个Pod的Horizon前缀相同
6条答案
按热度按时间o8x7eapl1#
仔细检查您的
APP_ENV
是否与horizon.php配置中的某个环境匹配,否则horizon.php将不会启动任何队列工作器。默认情况下,仅提供
local
和production
环境:https://laravel.com/docs/8.x/horizon#environments
zfciruhq2#
经过几天的努力,我找到了这个问题的答案。
在Docker环境中使用Redis作为缓存、队列或广播代理时,我们需要确保正确定义以下环境变量,并且它们在所有pod中必须相同。
希望这将有助于其他试图使用Kubernetes和Docker部署Laravel应用程序的人。
jexiocij3#
就我而言,我需要将应用程序环境从生产更改为生产
6qqygrtg4#
在我的例子中,我把作业添加到“email”队列中,但是horizon.php配置文件没有为supervisor-1指定这个队列名称:-)
jhiyze9q5#
我只是重新启动Redis服务器
bt1cpqcv6#
如果作业或侦听器向外部服务发送请求,并且无法到达目的主机,并且连接超时值设置为非常大的值,或者作业超时值也设置为很大的值,则作业也可能处于挂起状态足够长的时间,以至于看起来Horizon没有执行它们。