【发布时间】:2020-01-17 00:57:07
【问题描述】:
现在,我正在尝试让 Google Cloud 上的 App Engine(Flex 环境)能够连接到同一项目中的 postgreSQL 服务器。 我已为 SQL 数据库概述下列出的服务帐户赋予 Cloud SQL 客户端角色。执行时,我的 knex 实例是这样配置的
const KNEX_CON = {
user: USERNAME,
password: PASSWORD,
database: DATABASE,
host: "/cloudsql/PROJECT_ID:us-central1:INSTANCE"
}
const knexInstance = knex({
client: 'pg',
connection: KNEX_CON,
})
我也有 app.yaml 到beta_settings: cloud_sql_instances: "PROJECT_ID:us-central1:INSTANCE"
我一直在查看文档和我能找到的每个 stackoverflow 答案。我所做的一切都不起作用。在 App Engine 中运行的任何 Knex 实例都会失败。任何不需要 knex 实例的 Express 端点都可以完美运行。当我尝试连接到 Gcloud 上的 SQL 服务器而不将我的 IP 地址列入白名单时,我不断收到相同的错误/超时。请帮帮我。
【问题讨论】:
-
通常我希望“主机”是一个 IP 地址或服务器/dns 名称。但也许这就是适用于 knex/glcoud 的格式。你确定那位是正确的吗?
-
cloud.google.com/sql/docs/postgres/connect-app-engine 和其他堆栈溢出问题已指定使用 UNIX 套接字。对于MYSQL,那个knex设置其实叫socket,但是对于postgres,需要在host下。
-
您是否已通过控制台注销您的配置?我认为环境变量不会像“主机”那样被替换为字符串。相反,您应该为其创建一个环境变量,例如
export PG_HOST="/cloudsql/$PROJECT_ID:us-central1:$INSTANCE"并使用“host”:PG_HOST。
标签: node.js postgresql cloud gcloud knex.js