我正在使用Go
进行第一个应用程序引擎项目。我在云控制台内的同一项目中有一个云SQL实例和应用程序引擎。
我的app.yaml
文件中有以下内容:
service: myservice
runtime: go
api_version: go1
env_variables:
#for deploying
#POSTGRES_CONNECTION: "user=postgres password=<redacted> dbname=my_database host=/cloudsql/myproject:us-west1:myserver"
#for testing locally via cloud proxy
POSTGRES_CONNECTION: "user=postgres password=<redacted> dbname=mydatabase sslmode=disable"
beta_settings:
cloud_sql_instances: myproject:us-west1:myserver
handlers:
# All URLs are handled by the Go application script
- url: /.*
script: _go_app
在代码中我打开连接:
datastoreName := os.Getenv("POSTGRES_CONNECTION")
db, err := sql.Open("postgres", datastoreName)
在我的本地计算机上,我已经设置了cloud_sql_proxy
:
./cloud_sql_proxy -instances=passio-nutrition-develop-bcb6:us-west1:nutrition-sqlite-source=tcp:5432
以及使用POSTGRES_CONNECTION
设置用于本地测试,一切正常。
但是,当我设置用于部署的POSTGRES_CONNECTION
并运行gcloud app deploy
时,当我尝试达到端点时,我会收到一条错误消息:
{"Op":"dial","Net":"unix","Source":null,"Addr":{"Name":"/cloudsql/myproject:us-west1:myserver/.s.PGSQL.5432","Net":"unix"},"Err":{"Syscall":"socket","Err":1}}
我尝试了各种不同版本的POSTGRES_CONNECTION
,包括将=tcp:5432
添加到host
和cloud_sql_instances
的末尾,但我无法连接工作。
如果有人可以给我一些很棒的指针
确保您启用了云SQL Admin API,并且您的默认App Engrion Service帐户具有正确的IAM权限(它需要具有Cloud SQL Connect
角色或更高(。
app.yaml
的示例运行时:GO
api_version:go1
处理者:
url:/stylesheets
static_dir:样式表
url:/(。*。(gif | png | jpg(($
static_files:static/ 1
上传:static/.*。(gif | png | jpg($
url:/.*
脚本:_go_app
连接到postgresql
包装主
导入(
"数据库/SQL"
" FMT"
_" github.com/lib/pq"
(
const(
主机=" localhost"
port = 5432
用户=" postgres"
密码=" your-password"
dbname =" calhounio_demo"
(
func main(({
psqlinfo:= fmt.sprintf(" host =%s port =%d user =%s"
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db,err:= sql.open(" postgres",psqlinfo(
如果err!= nil {
panic(err)
}
defer db.close((
err = db.ping((
如果err!= nil {
panic(err)
}
fmt.println("成功连接!"(
}