1

我正在尝试在 GAE 上进行续集。但是我正在努力使用在非标准路径上使用套接字的云 SQL 代理。

我的理解是,一个 url 会直接传递给 pg 库,根据这篇文章,它会建议下面的字符串是我需要的

我已经将数据库配置设置为

{
  url: 'postgresql:///db_user:db_password@/db_name?host=./cloudsql/my-project-1234:us-central1:my-cloud-sql-instance', 
  dialect: 'postgres'
}

但是,如果我运行,./node_modules/.bin/sequelize db:migrate我最终会遇到错误:

ERROR: database "db_user:db_password@/db_name" does not exist
4

1 回答 1

2

经过大量试验和错误后,可以使用主机变量传递套接字路径,但有一些陷阱:

  1. 路径必须是绝对路径,即必须以 a 开头/(否则假定它是主机名)
  2. 在基于 Linux 的操作系统上,套接字路径不得超过 108 个字符。如果我将套接字放在我的项目的子文件夹中(在我的主目录中),我得到了ENOENT(找不到文件),但是将套接字移动到/cloudsql根路径中修复了它。
  3. 它将假定路径是目录并附/.s.PGSQL.5432加到该目录(这很好,因为 Google 的 SQL 代理套接字在该文件中)

因此,通过以下配置,我能够通过 google 的云 SQL 代理运行数据库迁移:

{
    username: 'my_user',
    password: 'my_password',
    database: 'my_database',
    host: `/cloudsql/my-app-12345:us-central1:my_database`,
    logging: false,
    dialect: 'postgres',
    // Google cloud_sql_proxy is encrypted, so no need to encrypt
    ssl: false,
    dialectOptions: {
        ssl: false,
    },
    operatorsAliases: false,
}
于 2018-04-14T03:17:58.943 回答