0

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たが、有効な回避策とは考えていません。どうすればこれを修正できますか? コンソールは機能するのに、サーバーが機能しないのはなぜですか?

4

1 に答える 1