ホームページ >バックエンド開発 >Golang >Go アプリケーションが Ubuntu 上の MongoDB Atlas に接続できないのはなぜですか?それを修正するにはどうすればよいですか?

Go アプリケーションが Ubuntu 上の MongoDB Atlas に接続できないのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 15:16:12531ブラウズ

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

Ubuntu 上の Go で MongoDB Cloud データベースに接続する

開発者は最近、Go を使用して MongoDB Atlas データベースに接続しようとしたときに問題が発生しましたUbuntu システム上。接続には次のコード スニペットが使用されました:

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

このコードは以前は Windows マシンで動作していましたが、Ubuntu で実行するとエラーが発生しました:

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

解決策

エラー メッセージ「DNS メッセージをアンマーシャリングできません」は、MongoDB に固有のものではありません。 Go ドライバーではなく、Go バージョン 1.11.x での DNS メッセージの処理方法に関連する問題です。具体的には、Go 1.11 の DNS メッセージ解析ロジックの更新により、RFC-2782 への準拠が強化され、ドメイン名圧縮を使用する DNS 応答でエラーが発生するようになりました。

回避策

この問題を解決するには、開発者は次の回避策を実装できます:

  • 使用非 SRV MongoDB URI (例: SRV レコードの代わりにホスト名を使用)
  • /etc/resolv.conf の内容を更新して、準拠またはパブリック DNS サーバー (例: 1.1.1.1 または 8.8.8.8) を指定します。 )

または、開発者は、新しいバージョンへのアップグレードを検討できます。この問題が解決されているバージョン (例: 1.12 または 1.13) に移動してください。

以上がGo アプリケーションが Ubuntu 上の MongoDB Atlas に接続できないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。