9

Go を使用して Heroku の Postgres に接続しようとしています。すべてがローカルで正常に機能しています。

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 です。

4

1 に答える 1

11

Heroku + Go は接続文字列にかなりこだわっています。URL スタイルでは、Herokuが主張するsslmode=require の指定が許可されていないようです。

変更されたバージョンでは、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
}
于 2013-10-04T04:52:25.713 に答える