Имам някакъв код, който работи на локалния 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
Вече един час се боря с това и вероятно правя нещо много глупаво. Всяка помощ ще бъде оценена!
"github.com/go-sql-driver/mysql"
) или mymysql driver ("github.com/ziutek/mymysql/godrv"
)? - person icza   schedule 15.08.2016root
и че идентификаторът на проекта и името на екземпляра са правилни? - person icza   schedule 15.08.2016sql.Open()
само проверява своите аргументи, но не отваря връзка. За това можете да използватеDB.Ping()
. Вижте този отговор за подробности: Защо sql.Open() връща нула като грешка, когато не трябва? - person icza   schedule 16.08.2016