Google Cloud SQL: драйвер: плохое соединение, хотя работают разные проекты - PullRequest
0 голосов
/ 20 октября 2018

В настоящее время я пытаюсь развернуть другое приложение в 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))
}

Я ценю любую помощь.

...