You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下Laravel运行queue:listen报PDOException找不到驱动问题求助

解决Laravel queue:listen报PDOException: could not find driver的问题

嘿,我来帮你排查这个问题——站点能正常跑但队列命令报错,大概率是两个点出了问题:队列配置搞混了,或者CLI版PHP缺了PDO驱动,咱们一步步来解决:

1. 先修正你的队列配置(最可能的根源)

你现在的配置有点矛盾:.env里设了QUEUE_DRIVER=sync,但config/queue.php里的sync配置却用了database驱动——这完全不对啊!Laravel的sync驱动是同步执行任务,根本不需要依赖数据库队列表,你这是把sync和database驱动的配置搞混了。

两种修正方案选一个:

方案A:继续用同步队列(不需要数据库)

把config/queue.php里的sync配置改回默认的样子:

'sync' => [
    'driver' => 'sync',
],

同步队列会在触发任务时直接执行,不需要jobs表,也不会用到数据库连接。

方案B:改用数据库队列(需要持久化任务)

如果确实需要用数据库存队列任务,那得改两处:

  • 把.env里的QUEUE_DRIVER改成database:
    QUEUE_DRIVER=database
    
  • 把config/queue.php里的数据库驱动配置单独放对位置:
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'expire' => 60,
    ],
    
    之后别忘了执行迁移创建jobs表:
    php artisan queue:table
    php artisan migrate
    

2. 解决CLI版PHP缺失PDO驱动的问题

站点能正常运行,说明你的Web环境(Apache/Nginx用的PHP)已经装了PDO扩展,但执行php artisan用的是CLI版本的PHP,这俩的扩展安装情况可能不一样。

排查步骤:

  • 先确认CLI的PHP版本:
    php -v
    
    对比一下Web环境的PHP版本(可以通过phpinfo()查看),如果版本不一样,得装对应版本的PDO驱动。
  • 安装MySQL对应的PDO扩展(以PHP8.1为例):
    sudo apt-get update
    sudo apt-get install php8.1-mysql
    
    如果是其他版本,把php8.1换成你的CLI版本号就行。
  • 安装完后,先清一下配置缓存:
    php artisan config:clear
    

3. 验证解决效果

现在再执行队列命令试试:

php artisan queue:listen

如果是用同步队列,应该直接正常运行;如果是数据库队列,也能正常监听jobs表的任务了。

补充说明

为什么Web正常但CLI报错?因为Web服务器用的是mod_php或者php-fpm,属于单独的PHP运行环境,而CLI是直接调用系统的PHP二进制文件,两者的扩展配置是分开的,所以会出现一方有驱动另一方没有的情况。

内容的提问来源于stack exchange,提问作者Taras Germanyuk From Ukraine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:41:34