Compose.io の MongoDB クラスターに SSL 経由で接続するように Rails 4.2.6 アプリを構成しようとしています。このアプリは、mongo 2.4.1 および mongoid 5.1.5 gem を使用します。Compose.io MongoDB クラスターは自己署名 SSL 証明書を使用するため、compose.io から CA 証明書をダウンロードしてlib/certs/mongo-ca-bundle.pem
.
私の mongoid.yml ファイルは次のようになります (編集済み):
development:
clients:
default:
uri: mongodb://myuser:mypassword@some-host.dblayer.com:1111,some-other-host.dblayer.com:2222/mydb?ssl=true
options:
ssl_ca_cert: /path/to/myapp/lib/certs/mongo-ca-bundle.pem
上記の構成は、実行するrails console
と完全に機能し、compose.io データベースのコレクションに対してクエリを正常に実行できます。
ただし、実行しようとするrails server
と、30 秒後に「No server is available」というエラー メッセージが表示されてクラッシュします。
[..]/mongo/server_selector/selectable.rb:115:in `select_server': No server is available matching preference: #<Mongo::ServerSelector::Primary:0x47167439625640 tag_sets=[] max_staleness=nil> using server_selection_timeout=30 and local_threshold=0.015 (Mongo::Error::NoServerAvailable)
[..]/mongo/cluster.rb:226:in `next_primary'
Mongoid のデバッグ ログを有効にすると、問題が SSL ハンドシェイクにあることが示されます。
DEBUG -- : MONGODB | Server some-host.dblayer.com:1111 initializing.
DEBUG -- : MONGODB | SSL handshake failed. MongoDB may not be configured with SSL support.
構成を追加するまで、レールコンソールで同じエラーが発生していましたssl_ca_cert
。指定することでサーバーを接続することができましssl_verify: false
たが、有効な回避策とは考えていません。どうすればこれを修正できますか? コンソールは機能するのに、サーバーが機能しないのはなぜですか?