Heim > Backend-Entwicklung > Golang > Warum kann meine Go-Anwendung unter Ubuntu keine Verbindung zu MongoDB Atlas herstellen und wie kann ich das Problem beheben?

Warum kann meine Go-Anwendung unter Ubuntu keine Verbindung zu MongoDB Atlas herstellen und wie kann ich das Problem beheben?

Barbara Streisand
Freigeben: 2024-11-29 15:16:12
Original
529 Leute haben es durchsucht

Why Can't My Go Application Connect to MongoDB Atlas on Ubuntu, and How Can I Fix It?

Herstellen einer Verbindung zur MongoDB-Cloud-Datenbank in Go unter Ubuntu

Ein Entwickler ist kürzlich auf ein Problem gestoßen, als er versuchte, mit Go eine Verbindung zu einer MongoDB-Atlas-Datenbank herzustellen auf einem Ubuntu-System. Für die Verbindung wurde das folgende Code-Snippet verwendet:

func connectToDataBase() {
    ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
    defer cancel()
    client, err := mongo.Connect(ctx, options.Client().ApplyURI(dbURL))
    if err != nil {
        log.Fatal("Error connecting to Database: ", err.Error())
    }
    DB = client.Database("storyfactory")
}
Nach dem Login kopieren

Dieser Code hatte zuvor auf einem Windows-Rechner funktioniert, führte jedoch bei der Ausführung unter Ubuntu zu dem Fehler:

2019/04/13 00:20:37 Error connecting to Database: error parsing uri (mongodb+srv://User:[email protected]/test?retryWrites=true): lookup cluster0-gpxjk.gcp.mongodb.net on 127.0.0.53:53: cannot unmarshal DNS message
exit status 1
Nach dem Login kopieren

Lösung

Die Fehlermeldung „DNS-Nachricht kann nicht entmarshaliert werden“ ist nicht spezifisch für den MongoDB Go-Treiber, sondern ein Problem hängt mit der Art und Weise zusammen, wie DNS-Nachrichten in Go Version 1.11.x behandelt werden. Insbesondere führte ein Update der DNS-Nachrichtenanalyselogik in Go 1.11 zu einer strengeren Einhaltung von RFC-2782, was zu Fehlern bei DNS-Antworten führte, die Domänennamenkomprimierung verwenden.

Problemumgehungen

Um dieses Problem zu beheben, können Entwickler die folgenden Problemumgehungen implementieren:

  • Verwenden Sie a Nicht-SRV-MongoDB-URI (z. B. Verwendung von Hostnamen anstelle von SRV-Einträgen)
  • Aktualisieren Sie den Inhalt von /etc/resolv.conf, um einen kompatiblen oder öffentlichen DNS-Server anzugeben (z. B. 1.1.1.1 oder 8.8.8.8)

Alternativ können Entwickler ein Upgrade auf eine neuere Version von Go in Betracht ziehen (z. B. 1.12 oder 1.13), wo dieses Problem behoben wurde.

Das obige ist der detaillierte Inhalt vonWarum kann meine Go-Anwendung unter Ubuntu keine Verbindung zu MongoDB Atlas herstellen und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage