我有一些在本地GAE服务器上运行的代码,但是一旦将其发布到GAE,它就会引发错误“驱动程序:连接错误”。
下面的代码生成一个新的* 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
我已经为此战斗了一个小时,我可能正在做一些非常愚蠢的事情,任何帮助将不胜感激!
我最终需要更改我的dbcloud变量以包括从以下位置将其更改的SQL Server的区域:
'projectid:instancename'
至:
'projectid:regionname:instancename'
不知道为什么我需要这样做,因为它不在https://github.com/go-sql- driver/mysql的文档中,但现在都可以使用!