Конфигурация Mongo SSL с сертификатом CA работает только для консоли rails, а не для сервера rails

Я пытаюсь настроить приложение Rails 4.2.6 для подключения по SSL к кластеру MongoDB на compose.io. Приложение использует монго монго 2.4.1 и монгоид 5.1.5. Кластеры Compose.io MongoDB используют самозаверяющие SSL-сертификаты, поэтому я скачал сертификат CA из compose.io и поместил его в lib/certs/mongo-ca-bundle.pem,

Мой файл mongoid.y ml выглядит так (отредактировано):

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.

Раньше я получал ту же ошибку в консоли rails, пока не добавил ssl_ca_cert конфигурации. Мне удалось подключить сервер, указав ssl_verify: false но я не считаю это правильным решением. Как я могу это исправить? Почему консоль работает, а сервер - нет?

1 ответ

Решение

Кажется, я пропустил сертификат в CA-комплекте, вызывая сбой соединения. С соответствующим сертификатом CA в комплекте, rails server можно подключить просто отлично.

Причина того, что rails console работает, кажется, что он подключается к локальному экземпляру mongodb, даже если я указываю другой URL в mongoid.yml, Это кажется мне ошибочным, но я больше не исследовал.

Другие вопросы по тегам