拒绝连接Go + Postgres在Heroku上
问题描述:
我试图用Go去连接Heroku的Postgres。所有工作都很好。拒绝连接Go + Postgres在Heroku上
我在Heroku上收到的错误是dial tcp 127.0.0.1:5432: connection refused
。
我已经证实我的能力,通过heroku的命令行上的psql连接到数据库,并确认数据库url配置是正确的。代码很清晰,所以我想知道是否有较低级别的问题。
的代码是足够简单:
import (
"database/sql"
"github.com/coopernurse/gorp"
_ "github.com/lib/pq"
"os"
)
func openDb() *sql.DB {
connection := os.Getenv("DATABASE_URL")
db, err := sql.Open("postgres", connection)
if err != nil {
log.Println(err)
}
return db
}
...和我进口github.com/lib/pq。 Go版本是1.1.2。
答
Heroku + Go对连接字符串非常特别。 URL风格似乎不允许指定sslmode = require,这是Heroku insists upon。
修改后的版本使用PQ解析URL到传统的Postgres连接字符串,并添加参数:
import (
"database/sql"
"github.com/lib/pq"
"os"
)
func openDb() *sql.DB {
url := os.Getenv("DATABASE_URL")
connection, _ := pq.ParseURL(url)
connection += " sslmode=require"
db, err := sql.Open("postgres", connection)
if err != nil {
log.Println(err)
}
return db
}
奇怪......我从来没有乱用'sslmode = require',和我做了一些非常相似的事情(也使用'lib/pq')。此外,在代码中包含数据库连接详细信息也是不好的做法。 Heroku允许你设置环境变量,你的代码可以使用'os.Getenv()'来访问。祝你好运! :) – weberc2