Docs Menu
Docs Home
/ / /
Ruby MongoDB Driver
/

일반적인 오류

이 페이지의 내용

  • 기본 설정과 일치하는 서버를 사용할 수 없습니다.
  • OperationFailure 인증을 켜고 local 데이터베이스를 읽을 때
  • SocketTimeoutError 및 EC2의 이름 확인 오류
  • Mongo::Auth::Unauthorized 사용자에게 액세스 권한이 부여되지 않음

다음 오류가 표시되는 경우:

> client[:contacts].insert_one({ vpa: 'cool@cool'})
Mongo::Error::NoServerAvailable: No server is available matching preference: #<Mongo::ServerSelector::Primary:0x14987080 tag_sets=[] max_staleness=nil> using server_selection_timeout=30 and local_threshold=0.015
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/server_selector/selectable.rb:115:in `select_server'
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/cluster.rb:246:in `next_primary'
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/retryable.rb:150:in `legacy_write_with_retry'
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/retryable.rb:103:in `write_with_retry'
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/collection.rb:422:in `block in insert_one'
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/client.rb:485:in `with_session'
from /rvm/gems/ruby-2.4.2/gems/mongo-2.5.0/lib/mongo/collection.rb:421:in `insert_one'
from (irb):6
from /rvm/rubies/ruby-2.4.2/bin/irb:11:in `<main>'

이 오류는 Ruby 드라이버 버전 2.6.x 이하에서 발생했습니다. 이 오류는 드라이버가 서버에 연결할 수 없을 때 발생합니다. 이 문제를 해결하기 위해 다음을 시도해 볼 수 있습니다.

  • 운전자 를 최신 2.x 출시하다 로 업데이트합니다.

  • URI/연결 string 또는 호스트 목록의 포트 번호가 올바른지 확인합니다.

  • Atlas에 연결하는 경우 방화벽 규칙이 올바르게 구성되어 있는지 확인합니다. 클러스터 보안 에 대한 설명서를 참조하세요.

  • 애플리케이션 에서 포크 웹 서버 를 사용하는 경우 포크에 대한 설명서를 참조하세요.

이 문제에 대한 자세한 내용은RUBY- 를1281 참조하세요. .

local 데이터베이스를 읽으려고 할 때 다음 오류가 발생하는 경우:

Mongo::Error::OperationFailure: not authorized on local to execute command { find: "oplog.rs", filter: { ts:
{ $gte: Timestamp 1497449043000|0 } }, sort: { $natural: 1 } } (13)

사용자의 역할을 조정하고 로컬 데이터베이스에 대한 권한이 있는지 확인하여 이 문제를 해결할 수 있습니다. 특별히 oplog에 액세스하려는 경우 로컬 데이터베이스의 oplog.rs 컬렉션에 대한 읽기 액세스 권한이 있는 사용자 지정 역할을 만들 수도 있습니다. 역할 관리에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

이 문제에 대한 자세한 내용은MONGOID- 에서 확인할4446 수 있습니다. .

일부 사용자가 다음 오류가 발생했다고 보고했습니다.

Exception
Mongo::Error::SocketTimeoutError
Error
execution expired
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/socket/ssl.rb:57:in `pack_sockaddr_in'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/socket/ssl.rb:57:in `block (2 levels) in connect!'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/socket.rb:199:in `handle_errors'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/socket/ssl.rb:57:in `block in connect!'
/usr/lib/ruby/2.3.0/timeout.rb:101:in `timeout'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/socket/ssl.rb:56:in `connect!'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/address.rb:172:in `connect_socket!'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/server/connection.rb:86:in `connect!'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/server/connectable.rb:84:in `ensure_connected'
/var/lib/gems/2.3.0/gems/mongo-2.5.0/lib/mongo/server/connection.rb:256:in `write'

이 오류는 Ruby 드라이버 버전 2.5.1 에서 마지막으로 보고되었으며, 따라서 드라이버를 업데이트하면 이 문제를 해결할 수 있습니다. 한 사용자가 다음과 같이 이 문제를 해결했다고 보고했습니다.

EC2 의 DNS 서버는 기본값/ etc/resolv.conf 에 생성됩니다. 답변 따라 그리고 네임서버를 Google NS로 설정하여 이 문제를 해결할 수 있었습니다.

이 문제에 대한 자세한 내용은MONGOID- 에서 확인할4527 수 있습니다. .

일부 사용자가 다음 오류가 발생했다고 보고했습니다.

Mongo::Auth::Unauthorized: User ... is not authorized to access ...

Ruby 드라이버 버전 2.5+로 업그레이드한 후 드라이버는 기본적으로 SCRAM 권한 부여 메커니즘을 사용하도록 변경되었습니다. 이 오류는 사용자를 생성할 때 사용한 권한 부여 메커니즘이 드라이버에서 사용하는 권한 부여 메커니즘과 일치하지 않는 경우 발생할 수 있습니다. mongoid.yml 파일의 auth_mech 옵션을 사용하여 기본 권한 부여 메커니즘을 지정할 수 있습니다.

이 문제에 대한 자세한 내용은 다음을 참조하세요: RUBY-1684.

돌아가기

Ruby 드라이버 빠른 시작