【问题标题】:GORM Cloud SQL Connection on App Engine Using Go使用 Go 在 App Engine 上连接 GORM Cloud SQL
【发布时间】:2023-03-15 16:53:01
【问题描述】:

我正在尝试在 golang 中使用 GORM 连接到 Cloud SQL 数据库。

db, _ = gorm.Open("mysql", "user:pass@cloudsql(connection:name:example)/")
if err != nil {
        log.Println(err)
        //panic(err)
    }

当我尝试为应用提供服务时

goapp serve appengine/

我得到一个运行时错误

ERROR    2017-02-19 20:48:05,436 http_runtime.py:396] bad runtime process port ['\r\n']

我发现与数据库迁移有关

db.AutoMigrate(&models.Event{})

如果我删除 AutoMigrate,运行时进程端口错误就会消失。但是,每当我访问执行数据库查询的路由(即 /events)时,连接就会断开,抛出 404 页面,并记录错误消息sql: database is closed

当我通过构建包 go build && ./appname 并使用本地 MySQL 服务器在本地运行应用程序时,它工作正常。

谁能告诉我如何使用 Go 的 GORM 框架和 App Engine 连接到 Cloud SQL 数据库?

【问题讨论】:

    标签: google-app-engine go go-gorm


    【解决方案1】:

    这是由于在此文件中调用 log.New:https://github.com/jinzhu/gorm/blob/master/logger.go#L15

    这个anwser解释了为什么dev_appserver.py得到它:https://stackoverflow.com/a/24112953/4266494

    要禁用此功能,您可以禁用所有 GORM 日志记录:

    db.LogMode(false)
    

    或者使用适配器记录器输出:https://github.com/benguild/GAEBridge/blob/master/log/debugLevel.go

    db.SetLogger(NewDebugLogger(nil)) // on application scope
    db.SetLogger(NewDebugLogger(appengine.NewContext(req))) // on request scope
    

    我正在设置一个具有真实上下文的新记录器 这是我发现的唯一解决方法,可以在保留一些日志的同时避免崩溃,如果你们中的一个人有一个真实的日志,那就太棒了。

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 1970-01-01
      • 2017-09-21
      • 2019-02-25
      • 2014-07-19
      • 2020-06-07
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多