Erros comuns
Nesta página
Nenhum servidor está disponível para corresponder a preferência
Se você receber o seguinte erro:
> 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>'
Este erro foi produzido no Ruby Driver versão 2.6.x e anterior. Este erro é gerado quando o driver não consegue se conectar ao servidor. Para resolver isso, você pode tentar o seguinte:
Atualize o driver para a versão 2.x mais recente.
Verifique se o número da porta está correto na string de URI/connection ou na lista de hosts.
Se você estiver se conectando ao Atlas, verifique se as regras de firewall estão configuradas corretamente. Consulte a documentação sobre Segurança de cluster.
Se seu aplicação usa um servidor web de bifurcação, consulte a documentação sobre forking.
Veja mais sobre este problema aqui: RUBI-1281.
OperationFailure
Ao local
ler o banco de dados com a autenticação ativada
Se você estiver recebendo o seguinte erro ao tentar ler o banco de dados do local
:
Mongo::Error::OperationFailure: not authorized on local to execute command { find: "oplog.rs", filter: { ts: { $gte: Timestamp 1497449043000|0 } }, sort: { $natural: 1 } } (13)
Você pode corrigir isso ajustando as funções que seu usuário tem e garantindo que ele tenha privilégios para o banco de dados local. Se quiser acessar especificamente o oplog, também é possível criar uma função personalizada com acesso de leitura à coleção oplog.rs
do banco de dados local. Você pode encontrar mais informações sobre o gerenciamento de funções aqui.
Você pode encontrar mais informações sobre esse problema aqui: MONGOID-4446.
SocketTimeoutError
e erros de resolução de nome na EC2
Alguns usuários relataram ter recebido o seguinte erro:
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'
Este erro foi relatado pela última vez na versão 2.5.1 do driver Ruby. portanto, atualizar o driver pode resolver esse problema. Um usuário relatou que eles resolveram esse problema da seguinte maneira:
Os servidores DNS no EC2 são gerados em /etc/resolv.conf por padrão. Seguindo a resposta e definindo os servidores de nomes para o Google NS, Consegui corrigir esse problema.
Você pode encontrar mais informações sobre esse problema aqui: MONGOID-4527.
Mongo::Auth::Unauthorized
O usuário não está autorizado a acessar
Alguns usuários relataram ter recebido o seguinte erro:
Mongo::Auth::Unauthorized: User ... is not authorized to access ...
Após atualizar para o Ruby Driver versão 2.5+, o driver foi alterado para usar o mecanismo de autorização SCRAM por padrão. Esse erro pode acontecer se o mecanismo de autorização com o qual seu usuário foi criado não corresponder ao mecanismo de autorização usado pelo driver. Você pode especificar o mecanismo de autorização preferido usando a opção auth_mech
em seu arquivo mongoid.yml
.
Veja mais sobre este problema aqui: RUBI-1684.