Конфигурация 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
, Это кажется мне ошибочным, но я больше не исследовал.