I'm having trouble making a basic connection to a CloudSQL (Postgres) database. Hoping someone can share a really basic, working example of connecting an appengine instance with a Postgres database on CloudSQL. Thanks in advance!
runtime: go
api_version: go1.8
handlers:
- url: /.*
script: _go_app
env_variables:
database_connection_string: user=USER password=PASSWORD dbname=DATABASENAME sslmode=disable host=PROJECT:REGION:INSTANCE
beta_settings:
cloud_sql_instances:PROJECT:REGION:INSTANCE
nobuild_files: commands/.*
skip_files:
- ^.*_test.go$
package main
import (
"database/sql"
"log"
"net/http"
"os"
)
type Application struct {
Router *mux.Router
Database *sql.DB
}
////////////////////////////////////////////////////////////////////////////////
// unexported
////////////////////////////////////////////////////////////////////////////////
func main() {
application := Application{}
application.initialize()
appengine.Main()
return
}
func (application *Application) initialize() {
application.Router = mux.NewRouter()
application.Router.StrictSlash(false)
application.initializeDatabase()
application.initializeRoutes()
return
}
func (application *Application) initializeDatabase() {
var err error
connectionString := os.Getenv("database_connection_string")
application.Database, err = sql.Open("cloudsqlpostgres", connectionString)
if err != nil {
log.Fatal(err)
}
return
}
func (application *Application) initializeRoutes() {
testcontrollers.InitializeRoutes(
application.Router,
application.Database,
)
http.Handle("/", application.Router)
return
}