В настоящее время я пытаюсь развернуть другое приложение в GAE, используя экземпляр Google Cloud SQL.У меня уже есть 2 службы, работающие там с такой же настройкой и использующие экземпляр Cloudsql.Однако, когда я пытаюсь подключиться к Cloudsql из моего новейшего сервиса, я получаю сообщение об ошибке «драйвер: плохое соединение» и не могу понять, почему.Я использую драйвер _ "github.com/go-sql-driver/mysql"
следующим образом:
var (
DB_INSTANCE *sql.DB
)
...
configFile := GetConfig()
user := configFile.DatabaseReaderHost.DatabaseUser
password := configFile.DatabaseReaderHost.DatabasePassword
dbName := configFile.DatabaseReaderHost.DatabaseName
connectionName := "project-id:region:instance-name"
if appengine.IsDevAppServer() {
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true",
user,
password,
configFile.DatabaseReaderHost.DatabaseHost,
configFile.DatabaseReaderHost.DatabasePort,
dbName))
if err != nil {
panic(err)
}
DB_INSTANCE = db
return nil
} else {
dbn, err := sql.Open("mysql", fmt.Sprintf("%s:%s@cloudsql(%s)/%s", user, password, connectionName, dbName))
if err != nil {
panic(err)
}
DB_INSTANCE = dbn
return nil
}
Я заметил, что соединение с экземпляром Cloudsql установлено, так как приведенный выше код вызывает не ошибку, а мой тестовый запрос.повторяет базу данных.
func TestDatabaseHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
var name string
err := DB_INSTANCE.QueryRow("SELECT name FROM names WHERE id = ?", 1).Scan(&name)
if err != nil {
if err == sql.ErrNoRows {
PrintSingleResponseJson(w, "error", fmt.Sprintf("no rows found"))
} else {
Log(r, fmt.Sprintf("Could not connect to database: %v", err))
PrintSingleResponseJson(w, "error", fmt.Sprintf("could not connect to database: %s", err))
}
return
}
PrintSingleResponseJson(w, "success", fmt.Sprintf("%s", name))
}
Я ценю любую помощь.