Php Laravel Horizon未执行挂起的作业-Kubernetes和Docker环境

Php Laravel Horizon未执行挂起的作业-Kubernetes和Docker环境,php,laravel,docker,kubernetes,laravel-horizon,Php,Laravel,Docker,Kubernetes,Laravel Horizon,我们的Laravel应用程序在Kubernetes有两个不同的豆荚 一个在端口80上运行的apache(CMD/usr/sbin/apache2ctl-D前台) 和另一名跑步工人(Laravel Horizon)(CMD php/var/www/artisan Horizon) 问题是,当我检查地平线仪表板时,它显示“活动”,我可以在“挂起的作业”部分看到作业,但它们从未实际执行。他们只是闲坐在那里 现在,当我在pod中运行apache并手动SSH并运行命令“phpartisanhorizo

我们的Laravel应用程序在Kubernetes有两个不同的豆荚

  • 一个在端口80上运行的apache(CMD/usr/sbin/apache2ctl-D前台)
  • 和另一名跑步工人(Laravel Horizon)(CMD php/var/www/artisan Horizon)
问题是,当我检查地平线仪表板时,它显示“活动”,我可以在“挂起的作业”部分看到作业,但它们从未实际执行。他们只是闲坐在那里

现在,当我在pod中运行apache并手动SSH并运行命令“phpartisanhorizon”时,它实际上会执行所有挂起的作业

我已经确保了以下几点:

  • 两个POD都与相同的Redis数据库服务连接
  • 两个吊舱的地平线前缀相同

  • 经过几天的努力,我终于找到了这个问题的答案

    在docker环境中将Redis用作缓存、队列或广播代理时,我们需要确保正确定义了以下环境变量,并且这些变量在所有POD中都必须相同

    • 缓存前缀
    • REDIS_前缀
    • REDIS_缓存_数据库
    • 地平线前缀

    希望这将帮助其他尝试使用Kubernetes和Docker部署Laravel应用程序的人。

    在我的情况下,我需要将我的应用程序环境从prod更改为production

    APP_ENV=production
    

    仔细检查您的
    APP_ENV
    是否与horizon.php配置中的一个环境匹配。否则,horizon将不会启动任何队列工作程序

    默认情况下,仅提供
    本地
    生产
    环境:


    我认为您应该与supervisor一起运行,在容器中安装一个supervisor,然后执行容器,看看会发生什么。@AdnanMumtaz我尝试过,但没有任何改变。我遇到了相同的问题。您使用的是什么类型的redis?我们正在试用企业版。似乎不起作用。还有什么我要查的吗。环境变量在API和horizon“队列工作器”上完全相同pod@aibarra,我知道现在已经很晚了,希望你可能已经明白了。我只想回答你,我认为Redis的类型并不重要,除非你的所有应用程序(所有微服务)都使用同一个Redis实例。如果你已经有了这个解决方案,如果你能在这里分享它就太好了,它可以帮助其他人。谢谢我们正要讨论这个问题,我无意中读到了这篇文章,对策略做了很多介绍,感谢config/database.php中的好观点,我们需要为缓存、事件、会话和地平线设置单独的REDIS_DB