0

我正在尝试配置 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但我不认为这是一个有效的解决方法。我怎样才能解决这个问题?为什么控制台可以工作,而服务器却不能?

4

1 回答 1

0

似乎我在 CA 捆绑包中丢失了一个证书,导致连接失败。使用捆绑包中的正确 CA 证书,rails server可以正常连接。

起作用的原因rails console似乎是它连接到本地 mongodb 实例,即使我在mongoid.yml. 这对我来说似乎有问题,但我没有进一步调查。

于 2017-03-03T08:35:32.850 回答