【发布时间】:2020-06-11 05:30:30
【问题描述】:
这是我在 Stack Overflow 上的第一个问题,如果我的信息不足,请见谅。
问题
我正在努力从 Google App Engine 上的 NestJS 连接 CloudSQL 上的 PostgreSQL。 当我尝试在本地环境中使用该应用程序时,该程序可以运行,但在 Google App Engine 中进行生产时,它就无法运行。
由于我挣扎了几天,我决定在这里询问很棒的社区。p>
我的环境
- Node.js:v10.19.0
- NestJS:6.10.5
- 类型ORM
- PostgreSQL:11.5.1
我的 app.yaml
runtime: nodejs10
env: standard
default_expiration: "4d 5h"
env_variables:
DATABASE_HOST: < public IP for Cloud SQL instance >
DATABASE_USERNAME: username
DATABASE_PASSWORD: password
DATABASE_NAME: databasename
INSTANCE_CONNECTION_NAME: "PROJECT_ID:REGION:INSTANCE_ID:DATABASE_NAME"
handlers:
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
错误
[Nest] 18 - 02/27/2020, 8:25:46 AM [TypeOrmModule] Unable to connect to the database. Retrying (3)... +34816ms
2020-02-27 08:25:46 default[20200227t163916] Error: connect ETIMEDOUT 34.84.188.209:5432 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:
其他操作
GAE 服务帐号我还为我的 GAE 服务帐户添加了 Cloud SQL 客户端权限(类似于 service-PROJECT_ID@gae-api-prod.google.com.iam.gserviceaccount.com)。
我还添加了如下所示的 package.json:
"engines": {
"node": "10.x.x"
},
在 typeorm 选项中,我添加了额外的套接字路径。
extra: {
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/`,
},
我不明白是否应该设置这个选项(我都试过了)。
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/.s.PGSQL.5432
or
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>
【问题讨论】:
-
为什么需要DATABASE_HOST:。您能否发布您用于连接到 sql 实例的代码?
标签: postgresql google-app-engine nestjs typeorm