Domanda

Ho avuto un problema in cui dopo la mia connessione MongoDB a Mongohq tramite Pymongo va inattiva per un po '(nessuna domanda), sarà timeout. Questo va bene, ma la connessione il database viene creata solo quando l'app Django viene avviata. Sembra che si stia riconnettendo bene, ma allora deve riautentare. Quando la connessione è morta e ricollegata e una domanda cerca di correre, aumenta un OperationFailure e il seguente valore di eccezione database error: unauthorized for db [shanereustle] lock type: -1 Il che mi dice che sta riconnettendo, ma non autentica. Ho importato OperationFailure da pymongo.errors E ho provato a usare il seguente tentativo ... tranne ma non riesco a catturare l'errore e autenticare.

try:
    db.mongohq.shanereustle.blog.find()
except OperationFailure:
    db.authenticate() #this function reauthenticates the existing connection

Ma per qualche motivo questo non cattura. Se al posto di questo codice, eseguo semplicemente db.authenicat () prima della query, riautenci bene e andrà bene, ma non voglio riautenicare su ogni query. Altri suggerimenti sui modi adeguati per farlo sono molto benvenuti e apprezzo l'aiuto.

Grazie!

È stato utile?

Soluzione

Puoi provare un fint_one () invece di fint (). Quest'ultimo non ripete automaticamente sul cursore.

L'ho appena provato con un database -auth e ha funzionato:

try:
  connection.test.foo.find_one()
except pymongo.errors.OperationFailure:
  print "caught"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top