laravel 5.8 mac 队列配置失败主因是 queue_connection 值误设为数据库名或自定义名,必须用合法驱动名(如 database、redis);database 驱动需执行 queue:table、queue:failed-table 及 migrate;redis 驱动需安装 redis 服务、php-redis 扩展及 predis 包,并确保 host 为 127.0.0.1。

Mac 下 Laravel 5.8 队列连接配置失败,90% 是因为 QUEUE_CONNECTION 值写成了数据库名或自定义连接名,而不是 Laravel 内置驱动标识符(如 database、redis)。
确认 QUEUE_CONNECTION 的值必须是合法驱动名
在 Mac 上运行 Laravel 5.8,.env 文件里不能写:
QUEUE_CONNECTION=local_mysql
也不能写数据库名(比如 laravel_dev),这是常见误解。它只能是 Laravel 已注册的驱动名,例如:
-
database:使用jobs表,无需额外服务,适合开发调试 -
redis:需本地装好 Redis(可用brew install redis启动),性能更好 -
sync:不是真队列,任务立即执行,仅用于测试逻辑
检查 config/queue.php 中 connections 数组是否含对应键(如 'database' 或 'redis'),默认已存在,不用手动加。
用 database 驱动时必须建表,且迁移要成功
Mac 上跑 php artisan queue:table 后,如果 php artisan migrate 报错「Base table or view not found: 1146 Table 'xxx.jobs' doesn't exist」,说明:
- 没执行
php artisan queue:failed-table(failed_jobs表也得建) - 当前数据库连接不可用(检查
.env中DB_HOST是否为127.0.0.1而非localhost,macOS 下有时解析异常) - MySQL 版本太低(Laravel 5.8 要求 MySQL ≥ 5.7.7)
建表命令顺序固定:
php artisan queue:table<br>php artisan queue:failed-table<br>php artisan migrate
用 redis 驱动时,Mac 环境要过三关
Laravel 5.8 默认不带 Redis 客户端,Mac 上必须手动装扩展和包:
- 先确认 Redis 进程在运行:
brew services start redis或redis-server - 安装 PHP Redis 扩展(非 predis):
pecl install redis,并在php.ini加extension=redis.so(重启 PHP-FPM 或 Valet) - 再装 Laravel 依赖:
composer require predis/predis:^1.1(5.8 兼容 1.x)
若 php artisan queue:work 启动时报 Connection refused,优先检查 config/database.php 中 redis.default.host 和 .env 的 REDIS_HOST 是否都设为 127.0.0.1(Mac 下 localhost 可能走 IPv6 导致失败)。
分发任务时指定连接,别只靠 .env
即使 .env 设了 QUEUE_CONNECTION=redis,你仍可能想临时把某个任务发到 database 连接做降级处理。这时不要改环境变量,直接在分发时链式调用:
SendEmail::dispatch($user)->onConnection('database');
注意:onConnection() 指定的是 config/queue.php 中 connections 的键名,不是驱动名本身——也就是说,如果你自定义了一个叫 email_queue 的 connection,就得写 onConnection('email_queue'),而不是 onConnection('database')。
Mac 系统对大小写和空格更敏感,.env 里所有值建议用引号包裹,尤其是含特殊字符的密码;queue:work 启动后看不到日志?试试加 --verbose 参数,真实错误往往藏在底层连接细节里。











