使用非标准unix套接字进行Sequelize-cli迁移

时间:2018-04-11 04:46:30

标签: node.js postgresql sequelize.js google-cloud-sql cloud-sql-proxy

我试图在GAE上获得续集。但我正在努力使用在非标准路径上使用套接字的云SQL代理。

我的理解是,网址会直接传递到pg库,并且基于this post,它会建议下面的字符串是我需要的

我已将数据库配置设置为

{
  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

1 个答案:

答案 0 :(得分:2)

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

  1. 路径必须是绝对的,也就是说,它必须以/开头(否则它假设它是主机名)
  2. 路径必须很短,不知道有多短,但如果我把它放在我的项目的子文件夹中(在我的主目录中),我得到ENOENT(找不到文件),但是将套接字移动到根路径中的/cloudsql会修复它。

    (失败的路径只有111个字符(我的OSX限制为255,所以不确定它失败的原因。)成功的较短路径是61个字符)

    < / LI>
  3. 它会假设路径是目录并附加/.s.PGSQL.5432(这很好,因为Google的SQL代理套接字在该文件中)

  4. 所以使用以下配置,我能够通过谷歌的云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,
    }