Laravel Horizo​​n 不执行挂起的作业 - Kubernetes 和 Docker 环境

Amb*_*oni 5 php laravel docker kubernetes laravel-horizon

我们的 Laravel 应用程序在 Kubernetes 中有两个不同的 Pod,

  • 一个在端口 80 上运行的 apache,(CMD /usr/sbin/apache2ctl -D FOREGROUND)
  • 和另一个正在运行的工人(Laravel Horizo​​n)(CMD php /var/www/artisan horizo​​n)

问题是当我检查地平线仪表板时,它显示“活动”,我可以在“待处理作业”部分看到作业,但它们从未真正执行过。他们只是坐在那里闲着。

现在,当我在运行 apache 的 pod 中使用 SSH 并手动运行命令“php artisan horizo​​n”时,它实际上会执行所有挂起的作业。

我已经确保了以下几点:

  1. 两个 Pod 都连接到同一个 Redis 数据库服务
  2. 两个 Pod 的 Horizo​​n Prefix 相同

Mos*_*hri 19

仔细检查您的APP_ENV环境是否与 Horizo​​n.php 配置中的环境之一匹配。否则,地平线将不会启动任何队列工作人员。

仅默认提供环境localproduction

https://laravel.com/docs/8.x/horizo​​n#environments


Amb*_*oni 9

经过几天的努力,我得到了这个问题的答案。

在 docker 环境中使用 Redis 作为缓存、队列或广播代理时,我们需要确保正确定义以下环境变量,并且它们在所有 pod 中必须相同。

  • 缓存前缀
  • REDIS_前缀
  • REDIS_CACHE_DB
  • HORIZON_PREFIX

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


小智 6

就我而言,我需要将应用程序环境从产品更改为生产

APP_ENV=production
Run Code Online (Sandbox Code Playgroud)