我正在使用Go
创建我的第一个App Engine项目。我在云控制台内部的同一项目中有一个云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
,但是我无法使连接正常工作。 / p>
如果有人可以给我一些很棒的指针
答案 0 :(得分:1)
确保已启用Cloud SQL Admin API,并且您的默认App Engine服务帐户具有正确的IAM权限(它需要具有Cloud SQL Connect
角色或更高权限)。
答案 1 :(得分:0)
app.yaml示例
运行时:开始
api_version:go1
处理程序:
url:/ stylesheets
static_dir:样式表
url:/(。*。(gif | png | jpg))$
static_files:静态/ \ 1
上传:静态/.*。(gif | png | jpg)$
url:/.*
脚本:_go_app
连接到Postgresql
软件包主要
导入(
“数据库/ sql”
“ fmt”
_“ github.com/lib/pq”
)
const(
host =“ localhost”
端口= 5432
user =“ postgres”
password =“您的密码”
dbname =“ calhounio_demo”
)
func main(){
psqlInfo:= fmt.Sprintf(“主机=%s端口=%d用户=%s” +
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db,err:= sql.Open(“ postgres”,psqlInfo)
if err!= nil {
panic(err)
}
推迟db.Close()
err = db.Ping()
if err!= nil {
panic(err)
}
fmt.Println(“已成功连接!”)
}