使用Go在App Engine上进行GORM Cloud SQL连接

时间:2017-02-19 20:59:19

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

我尝试在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数据库吗?

1 个答案:

答案 0 :(得分:0)

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

这可以解释为什么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

我设置了一个具有真实背景的新记录器 这是我发现在保留一些日志时避免崩溃的唯一解决方法,如果你们其中一个人有真正的日志,它可能会很棒。