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

安装Herd后换回Valet,PostgreSQL项目出现502错误求助

解决思路:Valet下PostgreSQL项目502 Bad Gateway(PHP-FPM SIGABRT)

核心问题是PHP的pdo_pgsql/pgsql扩展版本(15.3)与PostgreSQL 12版本不兼容,导致PHP-FPM进程触发SIGABRT崩溃,进而引发Nginx 502错误。而php artisan serve使用的是PHP内置服务器,环境与FPM存在差异,因此未出现崩溃。

以下是针对性解决步骤:

1. 降级PHP扩展以匹配PostgreSQL 12

扩展与PostgreSQL版本不匹配是核心诱因,需重新编译安装适配PG12的版本:

  • 切换到PostgreSQL 12并启动服务:
    brew services stop postgresql
    brew link --force postgresql@12
    brew services start postgresql@12
    
  • 卸载现有高版本扩展:
    pecl uninstall pdo_pgsql pgsql
    
  • 编译安装适配PG12的扩展(指定PG路径):
    pecl install -D 'configureoptions="--with-pgsql=/usr/local/opt/postgresql@12"' pgsql
    pecl install -D 'configureoptions="--with-pdo-pgsql=/usr/local/opt/postgresql@12"' pdo_pgsql
    
  • 重启PHP-FPM服务:
    valet restart php
    

2. 排查Valet与PHP-FPM的配置残留

Herd卸载后可能残留冲突配置,导致FPM环境异常:

  • 确认Valet使用的PHP版本与CLI一致:
    valet php --version
    php --version
    
  • 对比CLI与FPM的PHP配置文件,确保加载的扩展一致:
    valet php --ini
    php --ini
    
  • 重置Valet核心配置:
    valet install
    

3. 单独测试PHP-FPM连接

直接测试FPM是否能正常处理PostgreSQL请求,排除Nginx干扰:

  • 找到PHP-FPM的Socket路径(通常为/usr/local/var/run/php-fpm.sock)
  • 创建测试文件test.php:
    <?php
    try {
        $pdo = new PDO('pgsql:host=127.0.0.1;port=5432;dbname=你的数据库名', '用户名', '密码');
        echo "连接成功";
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    ?>
    
  • 通过Socket请求测试:
    curl -X GET --unix-socket /usr/local/var/run/php-fpm.sock http://localhost/test.php
    
  • 查看php-fpm日志是否仍出现SIGABRT崩溃记录,以此验证扩展适配是否生效。

4. 确认PostgreSQL连接配置

确保Laravel .env 中的PG配置正确:

  • 检查端口:PostgreSQL 12默认端口为5432,若之前安装过其他PG版本,可能占用端口导致冲突,可通过lsof -i :5432确认
  • 用psql测试数据库连接:
    psql -U 用户名 -d 数据库名
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:55:05