使用 Sequelize 将 Cloud Run Node 应用连接到 Cloud SQL

问题描述 投票:0回答:2

我正在尝试在

Google Cloud Run
上部署 Nodejs 应用程序,该应用程序应该使用
Cloud SQL
ORM 连接到
Sequelize
MySQL 数据库。

如果我对云 sql 实例使用本地代理,效果很好,但是当我尝试将其部署到 Cloud Run 时,Sequelize 无法找到数据库实例。

我尝试在sequelize的主机属性中给出'/cloudsql/',尝试公共IP(每次都会超时)

这就是我的配置:

exports.PRODUCTION = {
    HOST: "/cloudsql/<connection-name-here>",
    USER: "<db-user",
    PASSWORD: "<db-password>",
    DB: "<db-name>",
    dialect: "mysql",
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    }
};

我在这里缺少什么?

提前致谢。

node.js google-cloud-platform sequelize.js google-cloud-sql google-cloud-run
2个回答
5
投票

我发现了我的错误。我在主机属性中传递 UNIX 套接字路径 (facepalm)

您必须在配置中 dialectOptions 的 socketPath 属性中传递套接字路径。


0
投票

对于任何想知道如何通过 Sequelize V6 使用 PostgreSQL 来做到这一点的人,下面是我的解决方案:

class Database implements IDatabase {
  private static instance: Database;
  public sequelize: Sequelize;

  /**
   * @constructor
   */
  private constructor() {
    const isProduction: boolean = process.env.NODE_ENV !== "development" && process.env.NODE_ENV !== "test";
    this.sequelize = new Sequelize({
      host: isProduction ? `/cloudsql/${process.env.SQL_HOST}` : process.env.SQL_HOST_DEV as string,
      username: process.env.SQL_USERNAME as string,
      password: process.env.SQL_PASSWORD as string,
      database: process.env.SQL_DATABASE as string,
      dialect: "postgres",
      port: isProduction ? Number(process.env.SQL_PORT) : Number(process.env.SQL_PORT_DEV),
      logging: isProduction ? console.log : false,
    });
  }

 /**
   * Method which returns either the existing instance or instantiates one
   * then returns only that preexisting instance
   * @return {Database}
   */
  public static GetInstance(): Database {
    if (!this.instance) {
      Database.instance = new Database();
    }
    return Database.instance;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.