Laravel Horizon面板无任务显示问题求助(跨项目调度场景)
核心排查步骤
校验Redis配置与Horizon前缀一致性
确认两个项目.env中的REDIS_HOST、REDIS_PORT、REDIS_DB、REDIS_PASSWORD完全匹配,Redis数据库编号差异会导致Horizon无法识别Project A推入的任务。同时确保HORIZON_PREFIX在两个项目中完全相同,该前缀是Horizon关联Redis队列数据的核心标识。检查Horizon监控队列范围
打开Project B的config/horizon.php,查看environments配置块,确认其中的队列列表包含Project A调度任务时指定的队列名称。默认Horizon仅监控default队列,若A的任务推送到自定义队列(如task-processing)但Horizon未配置监控,面板将无数据。示例修正配置:
'environments' => [ 'local' => [ 'supervisor-1' => [ 'maxProcesses' => 3, 'queue' => ['default', 'task-processing'], // 补充目标队列名 ], ], ],修改后执行
php artisan horizon:terminate终止现有Horizon进程,再重新启动php artisan horizon。确认任务由Horizon进程处理
同时运行queue:work和horizon时,任务可能被queue:work进程抢占处理,导致Horizon无执行记录。先停止queue:work进程,仅保留Horizon运行,重新触发任务后查看面板数据。验证Redis队列数据状态
登录Homestead的Redis服务(执行redis-cli),用KEYS "{你的HORIZON_PREFIX}:*"查看Horizon相关键值,再用KEYS "queues:*"检查队列数据是否存在。若队列数据存在但Horizon键值缺失,说明Horizon未正确连接Redis。清理Horizon专属缓存
除optimize:clear外,执行php artisan horizon:clear清理Horizon专属缓存,随后重启Horizon服务。同时确认Project B的config/queue.php中Redis驱动配置正确引用.env参数:'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, ],
内容的提问来源于stack exchange,提问作者kamer

