Всем доброго времени суток, у меня проблемы с подключением моего приложения golang к экземпляру облака SQL Postgres.Я только что ознакомился с их учебником в Google Cloud Platform и примером кода, но, похоже, он не работает.У меня есть только два файла app.yaml и main.go только для проверки соединения:
app.yaml
runtime: go api_version: go1 env: standard
env_variables: CLOUDSQL_CONNECTION_NAME: bxustl2019proj:asia-east1:sqlstlbxu CLOUDSQL_USER: ustldbbxu CLOUDSQL_PASSWORD: bxuuserstldb CLOUDSQL_DB: stlbxudbs
beta_settings:
cloud_sql_instances: bxustl2019proj:asia-east1:sqlstlbxu
handlers:
- url: /(.*\.(gif|png|jpg))$ static_files: static/\1 upload: static/.*\.(gif|png|jpg)
- url: /.* script: _go_app
main.go
package dptest
import (
_"bytes"
"database/sql"
"fmt"
"log"
"net/http"
"os"
_ "github.com/lib/pq"
)
var db *sql.DB
func init() {
db = DB()
http.HandleFunc("/", indexHandler)
}
// DB gets a connection to the database.
// This can panic for malformed database connection strings, invalid credentials, or non-existance database instance.
func DB() *sql.DB {
/*
var (
connectionName = mustGetenv("CLOUDSQL_CONNECTION_NAME")
user = mustGetenv("CLOUDSQL_USER")
dbname = mustGetenv("CLOUDSQL_DB")
password = os.Getenv("CLOUDSQL_PASSWORD") // NOTE: password may be empty
socket = os.Getenv("CLOUDSQL_SOCKET_PREFIX")
)
//cloudsql is used on App Engine.
if socket == "" {
socket = "/cloudsql"
}
*/
// PostgreSQL Connection, uncomment to use.
// connection string format: user=USER password=PASSWORD host=/cloudsql/PROJECT_ID:REGION_ID:INSTANCE_ID/[ dbname=DB_NAME]
//dbURI := fmt.Sprintf("user=%s password=%s host=/cloudsql/%s database=%s", user, password, connectionName, dbname)
dbURI := fmt.Sprintf("user=ustldbbxu password=bxuuserstldb host=/cloudsql/bxustl2019proj:asia-east1:sqlstlbxu/stlbxudbs")
conn, err := sql.Open("postgres", dbURI)
log.Printf("CONNECTION: %v", conn)
if err != nil {
panic(fmt.Sprintf("DB: %v", err))
}
rows, err := conn.Query("SELECT * FROM GAMES")
log.Printf("ROW: %v", rows)
if err != nil {
log.Printf("Could not query db: %v", err)
}
defer rows.Close()
return conn
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
w.Header().Set("Content-Type", "text/plain")
log.Printf("CONNECTION: %v", db)
rows, err := db.Query("SELECT * FROM GAMES")
log.Printf("ROW: %v", rows)
if err != nil {
log.Printf("Could not query db: %v", err)
http.Error(w, "Internal Error", 500)
return
}
defer rows.Close()
}
func mustGetenv(k string) string {
v := os.Getenv(k)
if v == "" {
log.Panicf("%s environment variable not set.", k)
}
return v
}
Iпопытался использовать Go Run.и goapp служить.Я попытался добавить импорт appengine также, но, похоже, ни один из них не работает, и он продолжает выдавать ошибку:
Не удалось запросить db: dial unix / cloudsql / bxustl2019proj: asia-east1: sqlstlbxu / stlbxudbs/.s.PGSQL.5432: connect: нет такого файла или каталога
Cloud SQL Admin также включен.Я только что закомментировал env для более легкого запуска, ошибка кажется одинаковой независимо от жесткого кодирования пути запроса или импорта из yaml.
Я надеюсь, что кто-то может помочь мне в этом. Спасибо.