Laravel Horizon 未执行挂起的作业 - Kubernetes 和 Docker 环境
Laravel Horizon not executing pending jobs - Kubernetes and Docker environment
我们的 Laravel 应用在 Kubernetes 中有两个不同的 pods,
- 一个 运行在端口 80 上运行的 apache,(CMD /usr/sbin/apache2ctl -D FOREGROUND)
- 和另一个运行ning worker (Laravel Horizon) (CMD php /var/www/artisan horizon)
问题是当我检查 horizon 仪表板时,它显示 'Active',我可以在 'Pending Jobs' 部分看到作业,但它们从未真正执行过。他们只是坐在那里闲着。
现在,当我在 pod 中 SSH 运行ning apache 并手动 运行 命令 'php artisan horizon' 时,它实际上执行了所有待处理的作业。
我已经确认了以下几点:
- 两个 pods 都连接到相同的 Redis 数据库服务
- Horizon pods
的前缀相同
经过几天的努力,我得到了这个问题的答案。
在 docker 环境中将 Redis 用作缓存、队列或广播代理时,我们需要确保正确定义了以下环境变量,并且它们在所有 pods.
- CACHE_PREFIX
- REDIS_PREFIX
- REDIS_CACHE_DB
- HORIZON_PREFIX
希望这会帮助其他人尝试使用 Kubernetes 和 Docker.
部署 Laravel 应用程序
就我而言,我需要将我的应用程序环境从 prod 更改为 production
APP_ENV=production
仔细检查您的 APP_ENV
与 horizon.php 配置中的环境之一相匹配。否则 horizon 将不会启动任何队列工作程序。
默认仅提供 local
和 production
环境:
在我的例子中,我将作业添加到“电子邮件”队列中,但是 horizon.php 配置文件没有为 supervisor-1 指定此队列名称:-)
我们的 Laravel 应用在 Kubernetes 中有两个不同的 pods,
- 一个 运行在端口 80 上运行的 apache,(CMD /usr/sbin/apache2ctl -D FOREGROUND)
- 和另一个运行ning worker (Laravel Horizon) (CMD php /var/www/artisan horizon)
问题是当我检查 horizon 仪表板时,它显示 'Active',我可以在 'Pending Jobs' 部分看到作业,但它们从未真正执行过。他们只是坐在那里闲着。
现在,当我在 pod 中 SSH 运行ning apache 并手动 运行 命令 'php artisan horizon' 时,它实际上执行了所有待处理的作业。
我已经确认了以下几点:
- 两个 pods 都连接到相同的 Redis 数据库服务
- Horizon pods 的前缀相同
经过几天的努力,我得到了这个问题的答案。
在 docker 环境中将 Redis 用作缓存、队列或广播代理时,我们需要确保正确定义了以下环境变量,并且它们在所有 pods.
- CACHE_PREFIX
- REDIS_PREFIX
- REDIS_CACHE_DB
- HORIZON_PREFIX
希望这会帮助其他人尝试使用 Kubernetes 和 Docker.
部署 Laravel 应用程序就我而言,我需要将我的应用程序环境从 prod 更改为 production
APP_ENV=production
仔细检查您的 APP_ENV
与 horizon.php 配置中的环境之一相匹配。否则 horizon 将不会启动任何队列工作程序。
默认仅提供 local
和 production
环境:
在我的例子中,我将作业添加到“电子邮件”队列中,但是 horizon.php 配置文件没有为 supervisor-1 指定此队列名称:-)