Maison >développement back-end >Golang >Pourquoi mon application Go ne peut-elle pas se connecter à MongoDB Atlas sur Ubuntu et comment puis-je y remédier ?

Pourquoi mon application Go ne peut-elle pas se connecter à MongoDB Atlas sur Ubuntu et comment puis-je y remédier ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-29 15:16:12531parcourir

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

Connexion à la base de données MongoDB Cloud dans Go sur Ubuntu

Un développeur a récemment rencontré un problème en tentant de se connecter à une base de données MongoDB Atlas à l'aide de Go sur un système Ubuntu. L'extrait de code suivant a été utilisé pour la connexion :

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")
}

Ce code fonctionnait auparavant sur une machine Windows, mais lorsqu'il était exécuté sur Ubuntu, il entraînait l'erreur :

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

Résolution

Le message d'erreur "Impossible de désorganiser le message DNS" n'est pas spécifique au pilote MongoDB Go mais plutôt à un problème lié à la manière dont les messages DNS sont gérés dans Go version 1.11.x. Plus précisément, une mise à jour de la logique d'analyse des messages DNS dans Go 1.11 a introduit une conformité plus stricte avec la RFC-2782, entraînant des erreurs avec les réponses DNS qui utilisent la compression de nom de domaine.

Solutions de contournement

Pour résoudre ce problème, les développeurs peuvent mettre en œuvre les solutions de contournement suivantes :

  • Utiliser un serveur non-SRV URI MongoDB (par exemple, en utilisant des noms d'hôte au lieu d'enregistrements SRV)
  • Mettez à jour le contenu de /etc/resolv.conf pour spécifier un serveur DNS conforme ou public (par exemple, 1.1.1.1 ou 8.8.8.8)

Alternativement, les développeurs peuvent envisager de passer à une version ultérieure de Go (par exemple, 1.12 ou 1.13) où ce problème a été résolu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn