如何将 Google App Engine (Flex) Go 应用程序连接到 Google Cloud Postgres 实例

Posted

技术标签:

【中文标题】如何将 Google App Engine (Flex) Go 应用程序连接到 Google Cloud Postgres 实例【英文标题】:How to connect Google App Engine (Flex) Go app to Google Cloud Postgres instance 【发布时间】:2019-08-07 14:33:30 【问题描述】:

我正在使用 Go 构建一个应用程序并使用 Google App Engine 进行部署。

我在 Google Cloud 上设置了一个 PostgreSQL 实例,启用了 API,并使用本地机器上的 SQL 代理成功连接到它,无论是从本地 PSequel 客户端还是从我的应用程序。

但是,当我执行 gcloud app deploy 时,我收到此错误:

ERROR: (gcloud.app.deploy) Error Response: [9] 
Application startup error:
panic: dial unix /cloudsql/sapling:europe-west1:sapling/.s.PGSQL.5432: connect: no such file or directory

我已尝试将 Postgres 实例从版本 11 Beta 降级到 9.6。还尝试使用此驱动程序https://github.com/broady/gae-postgres,这看起来很有希望,但我无法为 flex 环境工作。

app.yaml

runtime: go
#Here we select the AppEngine Flex environment which performs a lot of the backend preparation for us including the ability to scale give the demand
env: flex
env_variables:
  POSTGRES_CONNECTION: "user=postgres password=thisisntmypwd dbname=postgres host=/cloudsql/sapling:europe-west1:sapling"
manual_scaling:
  instances: 1
#Select resource size
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
beta_settings:
  cloud_sql_instances: sapling:europe-west1:sapling=tcp:5432

config/db.go

package config

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
    "os"
)

var Db *sql.DB

//Set up connection to the database
func init() 
    var err error
    datastoreName := os.Getenv("POSTGRES_CONNECTION")
    Db, err = sql.Open(
        "postgres",
        datastoreName,
        )
    if err != nil 
        panic(err)
    


    err = Db.Ping()
    if err != nil 
        panic(err)
    

    fmt.Println("Connected to database")


【问题讨论】:

感谢您的帮助,我认为这是因为代码格式混乱。我现在已经解决了。或者还有什么你不喜欢的? 能否检查一下项目是否启用了 Cloud SQLAdmin API?如果之后仍然有错误,您可以使用标志 --verbosity=debug 再试一次吗?这可以为您提供有关错误的更多详细信息 谢谢@alan。我检查了。 Cloud SQL API 已启用,但未启用 Cloud SQLAdmin API。我启用了它,但似乎没有任何区别。还是同样的错误。使用详细标志运行但没有关于数据库连接的新信息,仍然与上述相同的错误 【参考方案1】:

我在我的测试环境中复制了这个问题,发现您遇到的错误是由于 beta_settings 指定了端口。我在最后尝试了=tcp:5432,它给了我同样的错误,然后我在没有它的情况下尝试了它,它被部署没有任何问题。

【讨论】:

是的,解决了它。非常感谢。我可以发誓不管有没有都试过了。那时我一定有其他问题,或者可能与未启用 Cloud SQLAdmin 有关。总之,修好了。

以上是关于如何将 Google App Engine (Flex) Go 应用程序连接到 Google Cloud Postgres 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何将 socket.io 部署到 Google App Engine?

如何将新服务部署到 Google App Engine 中的现有应用程序?

如何将 AJAX 与 Google App Engine (Python) 结合使用

如何将 Google App Engine (Flex) Go 应用程序连接到 Google Cloud Postgres 实例

如何将 Django 的标记模板标签与 Google App Engine WebApp 框架一起使用

如何将数据从 Android 移动设备发送到 Google App Engine 数据存储区?