You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel Homestead中Horizon无Supervisors,队列任务无法执行求助

解决Laravel Horizon在Homestead中无Supervisors、队列任务不执行的问题

我之前在Homestead的Laravel项目里部署Horizon时,也碰到过完全一样的状况——队列任务死活不被拾取,执行artisan horizon:list后Supervisors栏显示None。给你几个我亲测有效的排查和解决步骤:

  • 检查Horizon环境配置
    先打开config/horizon.php,确认environments区块里有没有对应你Homestead环境(一般是local)的Supervisor配置。默认配置里应该有类似这样的内容:

    'environments' => [
        'local' => [
            'supervisor-1' => [
                'maxProcesses' => 3,
                'queue' => ['default'],
            ],
        ],
    ],
    

    要是你自定义了环境名称,一定要确保配置块和当前APP_ENV对应,并且至少定义一个Supervisor。

  • 清除缓存并重启Horizon
    Horizon会缓存配置,修改配置后没清缓存很容易出问题。依次执行这些命令:

    php artisan horizon:publish # 刚安装Horizon时先确保配置文件已发布
    php artisan config:clear
    php artisan horizon:terminate # 终止当前运行的Horizon进程
    php artisan horizon # 重新启动Horizon
    

    跑完再执行artisan horizon:list,正常情况下就能看到Supervisors了。

  • 验证队列驱动与Redis状态
    Horizon默认依赖Redis作为队列驱动,先确认.env里的QUEUE_CONNECTION设为redis。然后在Homestead里执行redis-cli ping,返回PONG说明Redis运行正常;如果连不上,先重启Redis服务。

  • 查看Horizon日志找线索
    如果前面的步骤都没解决问题,去storage/logs/horizon.log里看看详细错误信息——比如是不是权限不足、Redis连接失败,或者队列名称不匹配,日志里一般会给出明确的提示。

  • 确认Homestead环境变量加载
    有时候Homestead里的环境变量没正确加载,导致Horizon读取的配置不对。执行echo $APP_ENV看看当前环境是否和.env里的APP_ENV一致,不一致的话调整后重启Horizon即可。

我当时就是改了配置没清缓存,重启后就正常运行了,你可以按顺序试一遍,应该能解决问题。

内容的提问来源于stack exchange,提问作者mykisscool

火山引擎 最新活动