使用非标准 unix 套接字的 Sequelize-cli 迁移
Sequelize-cli migration with non-standard unix sockets
我正在尝试在 GAE 上制作续集。但是我正在与在非标准路径上使用套接字的云 SQL 代理苦苦挣扎。
我的理解是 url 会直接传递给 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
经过大量试验和错误后,可以使用主机变量传递套接字路径,但有一些陷阱:
- 路径必须是绝对路径,也就是说,它必须以
/
开头(否则它假定它是一个主机名)
- The socket path must be 108 characters or less on a Linux-based operating system。如果我将套接字放在我的项目的子文件夹中(在我的主目录中),我得到
ENOENT
(找不到文件),但是将套接字移动到根路径中的 /cloudsql
修复了它。
- 它将假定路径是目录并将
/.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,
}
我正在尝试在 GAE 上制作续集。但是我正在与在非标准路径上使用套接字的云 SQL 代理苦苦挣扎。
我的理解是 url 会直接传递给 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
经过大量试验和错误后,可以使用主机变量传递套接字路径,但有一些陷阱:
- 路径必须是绝对路径,也就是说,它必须以
/
开头(否则它假定它是一个主机名) - The socket path must be 108 characters or less on a Linux-based operating system。如果我将套接字放在我的项目的子文件夹中(在我的主目录中),我得到
ENOENT
(找不到文件),但是将套接字移动到根路径中的/cloudsql
修复了它。 - 它将假定路径是目录并将
/.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,
}