問題タブ [mongo-c-driver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - externaproject_add に渡される cmake include_directories
mangrove (mongo-c-driver および mongo-cxx-driver 上の mongo ODM lib) を使用する必要があり、これを私のプロジェクトに CMakeExternalProject_Add
コマンドとして含め、依存関係を mongo-c-driver/mongo-cxx-driver とします。
include_directories
ここでのコマンドは、mongoc の cmake 構成ファイルで機能するため、実際には必要ありません。ただし、確かに、私もコメントなしでチェックしました。
したがって、mongo-c-driver からのインクルードは、次にインクルードされる外部プロジェクトである mangrove に必要です。
現在のプロジェクトのインクルード パスに存在するいくつかのインクルード ファイルが見つからない c++ エラーが原因で失敗します。したがって、含まれている外部プロジェクトは、以前に別の外部プロジェクトによって追加された現在の CMake インクルードを使用していないようです
include_directories
に含まれる CMake ベースのプロジェクトには、スクリプト内は影響しないようですExternalProject_Add
。
それらのインクルードパスを外部プロジェクトに渡すテクニックはありますか?
c++ - SSL/TLS で mongodb に接続できない
libmongoc を介して SSL 経由でローカル mongodb インスタンスに接続しようとしています。SSL を使用しない場合、接続は正常に機能し、CRUD 操作を正常に実行できますが、SSL を有効にしてデータを取得しようとすると、mongoc_cursor_next()
関数が長時間ハングし、終了しfalse
ます。
サーバー側では、ログは、関数内でスタックしている間、クライアントがサーバーに接続し、接続が受け入れられ、切断され、数分後にスタックが解除されるまで繰り返されることを示しています。
最初は自分のコードに問題があると思っていたので、オプションを指定して libmongoc ライブラリを再構築し、-DENABLE_TRACING=1
役立つものを特定できるかどうかを確認しました。しかし、驚いたことに、これで問題が「修正」されました。 でハングすることはなくmongoc_cursor_next()
なり、ドキュメントは正常に返されますが、トレースによって stdout が過剰なデバッグ情報でいっぱいになり、送受信された TCP パケットがダンプされます。トレースを有効にすると、問題はなくなります。トレースを無効にすると、元に戻ります。
関数を介して SSL オプションを設定しようとしましたmongoc_client_pool_set_ssl_opts
が、結果は URI を介してそれらを渡すのと同じです。クライアントでも証明書を使用しようとしましたが、うまくいきませんでした。機能した唯一のことは、クライアントで SSL を使用して libmongoc を構築するか、-DENABLE_TRACING=1
SSL を使用しないことでした。
私は信頼署名証明書を持っていないので、自己署名証明書を使用していることに関連するものかどうかはわかりません。しかし、sslAllowInvalidCertificates=true
これはモック データを使用した単なる開発データベースであるため、この要件を無視する必要があると考えました。
何か不足していますか?
私の環境:
クライアント:
Ubuntu 18.10 x64、libmongoc 1.13.1 / 1.9.5 (両方をテスト済み)、GCC 8.2.0
Windows 10 Pro、libmongoc 1.9.5、MSVC 2015。
サーバー:
Ubuntu 18.10 x64
MongoDB 4.0.6 (git バージョン: caa42a1f75a56c7643d0b68d3880444375ec42e3)
OpenSSL バージョン: OpenSSL 1.1.1 2018 年 9 月 11 日
私の例のクライアント:
私のサーバー構成 (mongod.conf):
編集:
さらにテストした結果、プールなしで接続すると、 でスタックしないことがわかりましたmongoc_cursor_next()
。しかし失敗し、次をmongoc_cursor_error()
返します:
また、mongo CLI と Compass を使用して、SSL 経由で正常に接続できます。