谷歌应用引擎golang,驱动程序:连接错误

时间:2016-08-15 13:52:49

标签: mysql google-app-engine go

我有一些代码在本地GAE服务器上工作,但是一旦我将它发布到GAE,就会抛出错误“driver:bad connection”。

下面的代码生成一个新的* sql.DB:

func NewDb() (*sql.DB, error) {
  cloud := os.Getenv("dbcloud")
  local := os.Getenv("dblocal")
  if appengine.IsDevAppServer() {
    return sql.Open("mysql", "root@tcp("+local+":3306)/dbo")
  }
  return sql.Open("mysql", "root@cloudsql("+cloud+")/dbo")
}

在我的app.yaml中,我有以下内容:

env_variables:
  dbcloud: 'projectid:instancename'
  dblocal: 'xxx.xxx.xxx.xxx'

它似乎正确地返回了一个新的* sql.DB,但是一旦我开始使用预处理语句就会出现问题。

db, err := NewDb() // err is nil
stmt, err := db.Prepare("INSERT INTO dbo.Users (Id) VALUES (?)") // err is driver: bad connection

我一直在和这个战斗一个小时了,我可能会做一些非常愚蠢的事情,任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:3)

我最终需要更改我的dbcloud变量以包含更改它的SQL服务器区域:

'projectid:instancename'

要:

'projectid:regionname:instancename'

不知道为什么我需要这样做,因为它不在https://github.com/go-sql-driver/mysql的文档中,但现在都在工作!