2013-10-04 14 views
5

पर गो + पोस्टग्रेस से इनकार कर दिया है। मैं गो का उपयोग करके हेरोकू के पोस्टग्रेस से कनेक्ट करने का प्रयास कर रहा हूं। सभी स्थानीय स्तर पर ठीक काम कर रहे हैं।कनेक्शन ने हेरोकू

हेरोकू पर मुझे जो त्रुटि मिल रही है वह dial tcp 127.0.0.1:5432: connection refused है।

मैंने अपनेोकू की कमांड लाइन पर psql के माध्यम से डेटाबेस से कनेक्ट करने की अपनी क्षमता की पुष्टि की है, और पुष्टि की है कि डेटाबेस यूआरएल कॉन्फ़िगरेशन सही है। कोड पर्याप्त स्पष्ट है, इसलिए मुझे आश्चर्य है कि निम्न स्तर की समस्या है या नहीं।

कोड काफी सीधा है:

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 का आयात कर रहा हूँ। जाओ संस्करण 1.1.2 है।

उत्तर

9

हेरोकू + गो कनेक्शन स्ट्रिंग के बारे में बहुत खास है। URL-style sslmode = आवश्यकता के विनिर्देश की अनुमति नहीं देता है, जो Heroku insists upon है।

संशोधित संस्करण एक पारंपरिक Postgres कनेक्शन स्ट्रिंग में URL पार्स करने के लिए pq का उपयोग करता है, और पैरामीटर जोड़ देता:

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 
} 
+0

अजीब ... मैं 'साथ sslmode = require' गड़बड़ करना पड़ा कभी नहीं किया है, और मैंने कुछ बहुत ही समान किया है ('lib/pq' का उपयोग करके)। साथ ही, आपके कोड में डीबी कनेक्शन विवरण शामिल करना बुरा अभ्यास है। हेरोोक आपको पर्यावरण चर सेट करने की अनुमति देता है, जो आपका कोड 'os.Getenv() 'का उपयोग कर एक्सेस कर सकता है। सौभाग्य! :) – weberc2

संबंधित मुद्दे