【发布时间】:2017-02-27 17:16:45
【问题描述】:
我正在尝试配置 Rails 4.2.6 应用程序以通过 SSL 连接到 compose.io 上的 MongoDB 集群。该应用程序使用 mongo 2.4.1 和 mongoid 5.1.5 gems。 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 秒后崩溃,并显示“没有可用的服务器”错误消息:
[..]/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 配置之前,我曾经在rails 控制台中遇到同样的错误。我确实设法通过指定ssl_verify: false 来连接服务器,但我不认为这是一个有效的解决方法。我怎样才能解决这个问题?为什么控制台可以工作,而服务器却不行?
【问题讨论】:
标签: ruby-on-rails ssl ruby-on-rails-4 compose-db mongoid5