2015-04-20 3 views
5

Wenn ich meine mongodb Server auf Version 3.0 von 2.6 aktualisieren, kann es keine Verbindung von Golang Verwendung mgo.wie mongodb 3.0 in golang verbinden

Ich füge 'authMechanism=SCRAM-SHA-1' in Verbindungszeichenfolge hinzu, und es kann immer noch keine Verbindung zum Server herstellen. Der Fehler, den ich bekommen ist SASL support not enabled during build (-tags sasl)

+0

Das ist also ein Laufzeitfehler oder ein Compiler-Fehler? – evanmcdonnal

+0

Laufzeitfehler, es ist in Ordnung, nachdem ich meinen mongodb-Server neu installiert habe. – William

+0

Mgo-Paket entfernen und erneut mit '-Tags sasl' Option. das behebt Ihr aktuelles Problem. Sie benötigen möglicherweise libsasl2-dev, um das neue Paket zu erstellen. 'go get -tags sasl labix.org/v2/mgo' ABER !!! nachdem ich es 'kann nicht SASL Sitzung einrichten: SASL (-4): kein Mechanismus zur Verfügung: Keine würdigen Mechs gefunden Bitte sagen Sie mir, wenn Sie einen Ausweg finden. –

Antwort

1

ich ähnliches Problem hatte. Irreführend fand ich rund um das Netzwerk, dass das Paket "labix.org/v2/mgo" enthalten sein muss, trotz der Tatsache, dass auf der offiziellen Seite http://labix.org/mgo (zum Zeitpunkt der Lektüre) es neuere und aktualisierte Informationen, die auf mindestens verweist Arbeiten für mich Paket "gopkg.in/mgo.v2".

Ich hoffe, das kann helfen, da ich zu den gleichen Schritten wie Sie ohne Erfolg kam und dann habe ich die Paket-Referenz geändert. Dieser Code funktioniert in meinem Fall:

package main 

    import (
    "fmt" 
    "time" 

    "gopkg.in/mgo.v2" 
) 

    //const MongoDb details 
    const (
    hosts  = "ds026491.mongolab.com:26491" 
    database = "messagingdb" 
    username = "admin" 
    password = "youPassword" 
    collection = "messages" 
) 

    func main() { 

    info := &mgo.DialInfo{ 
     Addrs: []string{hosts}, 
     Timeout: 60 * time.Second, 
     Database: database, 
     Username: username, 
     Password: password, 
    } 

    session, err1 := mgo.DialWithInfo(info) 
    if err1 != nil { 
     panic(err1) 
    } 

    col := session.DB(database).C(collection) 

    count, err2 := col.Count() 
    if err2 != nil { 
     panic(err2) 
    } 
    fmt.Println(fmt.Sprintf("Messages count: %d", count)) 
    } 

Es ist auch auf Github

+0

Das hat mir überhaupt nicht geholfen. Bei Verwendung von DialWithInfo wird immer noch die Authentifizierung fehlgeschlagen. Ich habe bestätigt, dass alle meine Informationen korrekt sind, da ich mich über einen anderen Client mit der DB verbinden kann. NB: Ich verwende Go1.7.1 – Gimli