常见错误
在此页面上
没有可用的服务器匹配偏好
如果收到以下错误:
> 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,请确保防火墙规则配置正确。 请参阅有关集群安全性的文档。
如果您的应用程序使用分叉 Web服务器,请参阅有关分叉的文档。
在此处查看有关此问题的更多信息: RUBY-1281 。
OperationFailure
在身份验证开启的情况下读取local
数据库时
如果在尝试读取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 。
SocketTimeoutError
以及 EC 2上的名称解析错误
部分用户报告出现以下错误:
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 , 因此更新驱动程序可能会解决此问题。 一位用户报告说,他们已通过以下方式解决此问题:
EC 2上的 DNS 服务器默认在 /etc/resolv.conf 中生成。 按照 回答 并将名称服务器设置为 Google NS 我能够解决这个问题。
您可以在此处找到有关此问题的更多信息: MONGOID-4527 。
Mongo::Auth::Unauthorized
用户无权访问
部分用户报告出现以下错误:
Mongo::Auth::Unauthorized: User ... is not authorized to access ...
升级到Ruby驱动程序版本 2.5+ 后,驱动程序已更改为默认使用SCRAM授权机制。 如果创建用户时使用的授权机制与驱动程序使用的授权机制不匹配,则可能会出现此错误。 您可以使用mongoid.yml
文件中的auth_mech
选项指定首选授权机制。
在此处查看有关此问题的更多信息: RUBY-1684 。