よくあるエラー
項目一覧
優先順位に一致するサーバーがありません
次のエラーが表示された場合:
> 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 。
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 サーバーはデフォルトで /etch/resolve.conf で生成されます。 回答 に従う と名前サーバーを Google DNS に設定することで、この問題を修正できました。
この問題の詳細については、こちら MONGOID-4527 をご覧ください。 。
Mongo::Auth::Unauthorized
ユーザーにアクセス権限がありません
一部のユーザーは、次のエラーが表示されたと報告しています。
Mongo::Auth::Unauthorized: User ... is not authorized to access ...
Ruby ドライバー バージョン2.5 + にアップグレードした後、ドライバーはデフォルトで SCRAM 認証メカニズムを使用するように変更されました。 このエラーは、ユーザーが作成された認可メカニズムが、ドライバーで使用される認可メカニズムと一致しない場合に発生することがあります。 希望する認可メカニズムを指定するには、 mongoid.yml
ファイルでauth_mech
オプションを使用します。
この問題の詳細はこちら: Ruby-1684 。