2017-02-27 7 views
0

compose.io에서 SSL을 통해 MongoDB 클러스터에 연결하도록 Rails 4.2.6 앱을 구성하려고합니다. 응용 프로그램은 mongo 2.4.1 및 mongoid 5.1.5 보석을 사용합니다. Compose.io MongoDB 클러스터는 자체 서명 된 SSL 인증서를 사용하므로 compose.io에서 CA 인증서를 다운로드하고 lib/certs/mongo-ca-bundle.pem에 두었습니다.CA 인증서가있는 Mongo SSL 설정은 레일즈 서버가 아닌 레일스 콘솔에서만 작동합니다.

내 mongoid.yml 파일이 (편집 됨)과 같은 : 나는 rails console을 실행하고 나는 성공적으로 compose.io 데이터베이스 컬렉션에 대해 쿼리를 실행할 수 있습니다 때

development: 
    clients: 
    default: 
     uri: mongodb://myuser:[email protected]:1111,some-other-host.dblayer.com:2222/mydb?ssl=true 
     options: 
     ssl_ca_cert: /path/to/myapp/lib/certs/mongo-ca-bundle.pem 

위의 구성은 완벽하게 작동합니다. 내가 mongoid에 대한 디버그 로깅을 사용하도록 설정하면

[..]/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' 

그것이 문제가 함께 있음을 나타냅니다 : 그러나

, 나는 그것이 30 초 후에 충돌 rails server를 실행하려고 오류 메시지가 "아니 서버를 사용할 수있다" SSL 핸드 셰이크 : 나는 ssl_ca_cert 구성을 추가 할 때까지

DEBUG -- : MONGODB | Server some-host.dblayer.com:1111 initializing. 
DEBUG -- : MONGODB | SSL handshake failed. MongoDB may not be configured with SSL support. 

나는 레일 콘솔에서 동일한 오류를 취득 할 경우에 사용합니다. 나는 ssl_verify: false을 지정하여 서버를 연결할 수 있었지만 유효한 해결 방법은 고려하지 않았습니다. 이 문제를 어떻게 해결할 수 있습니까? 콘솔은 어떻게 작동하지만 서버는 작동하지 않습니까?

답변

0

CA 연결 번들에 인증서가 없어서 연결이 끊어졌습니다. 번들에 적절한 CA 인증서가 있으면 rails server을 정상적으로 연결할 수 있습니다.

rails console이 작동 한 이유는 mongoid.yml에 다른 URL을 지정해도 로컬 mongodb 인스턴스에 연결하는 것 같습니다. 이것은 나에게 버그가있는 것처럼 보이지만 나는 더 이상 조사하지 않았다.