Google Cloud SQL:驱动程序:错误的连接,尽管不同的项目可以工作

时间:2018-10-20 10:13:18

标签: google-app-engine go google-cloud-sql

我目前正在尝试使用Google Cloud SQL实例在GAE上部署另一个应用程序。我已经使用Cloudsql实例在同一设置上运行了2个服务。但是,当我尝试从最新服务连接到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))
}

感谢所有帮助。

0 个答案:

没有答案