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

Strapi部署至Google App Engine连Cloud SQL报EAI_AGAIN错误

Strapi 部署至 Google App Engine 连接 Cloud SQL 报错解决方案

报错核心原因

运行时抛出的getaddrinfo EAI_AGAIN /cloudsql/connectionName错误,本质是MySQL连接器错误将Cloud SQL的Unix套接字路径作为网络主机名发起DNS解析,因该路径不存在于DNS解析规则中,最终解析失败导致应用无法启动。

注意:对MySQL驱动来说,Unix套接字路径不能通过host字段传入,否则会被当做主机名触发无效的DNS查询。


可落地的修正步骤

1. 调整数据库连接配置的套接字传参逻辑

原配置将Cloud SQL的Unix套接字路径写入host字段,不符合MySQL驱动的参数规则,需要将套接字路径单独迁移至socketPath配置项:
修正后的数据库连接配置:

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        client: 'mysql',
        database: env('DATABASE_NAME'),
        username: env('DATABASE_USERNAME'),
        password: env('DATABASE_PASSWORD'),
        // 单独将Cloud SQL套接字路径配置到socketPath字段
        socketPath: `/cloudsql/${env('INSTANCE_CONNECTION_NAME')}`,
      },
    },
  },
});

2. 校验App Engine部署配置的一致性

逐一核对app.yaml中的Cloud SQL实例配置,确保无以下问题:

  • 环境变量INSTANCE_CONNECTION_NAME的取值格式必须为GCP项目ID:实例所在区域:Cloud SQL实例ID,无拼写错误、多余空格
  • beta_settings.cloud_sql_instances的配置值,必须和上述环境变量的取值完全一致,不能存在字符缺漏
    参考修正后的yaml配置:
runtime: nodejs12
instance_class: F2
env_variables:
  HOST: '0.0.0.0'
  NODE_ENV: 'production'
  DATABASE_NAME: 'test'
  DATABASE_USERNAME: '数据库用户名'
  DATABASE_PASSWORD: '数据库密码'
  INSTANCE_CONNECTION_NAME: '你的Cloud SQL完整连接名'
beta_settings:
  cloud_sql_instances: '和上面相同的Cloud SQL完整连接名'

3. 排查Cloud SQL侧的权限与网络限制

  • 确认App Engine绑定的服务账号,已被授予Cloud SQL客户端权限(roles/cloudsql.client)
  • 确认Cloud SQL实例未配置强制公网连接规则,允许App Engine通过内置的Cloud SQL Auth Proxy通道接入

4. 依赖版本兼容校验

  • 检查项目内mysql2、bookshelf依赖版本,确认对socketPath参数的支持正常,无已知兼容bug
  • 现有使用的nodejs12运行时已停止社区维护,长期建议升级到受Google App Engine支持的LTS版本运行时,减少未知兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 21:15:03