2013-02-14 12 views
9

appena aggiornato alla versione più recente di mongoid (3.1.0) e sidekiq (2.7.2)
ora sto ottenendo l'errore: failed with error 10068: "invalid operator: $oid"
da guardare nel codice vedo una selezione del genere: @selector={"_id"=>{"$oid"=>"[some id]"}}
cosa può sbagliare qui?

risposta

7

l'aggiunta di questo al mio gemfile risolto il problema:

gem 'multi_json', '1.5.1' 

credo che qualcosa non va con l'ultima versione (1.6.0)

EDIT: la gemma è stato aggiornato alla nuova versione (1.6.1) che ha risolto questo problema. altro qui: https://github.com/intridea/multi_json/issues/89

+0

Questo non ha funzionato per me (vedi la mia risposta per una descrizione più completa del problema) . – Ben

+0

Questo non è più accurato, perché Sidekiq ha abbandonato l'utilizzo di MultiJson su '# perform_async'. Sidekiq ora usa il modulo JSON principale. Vedi [questo commento dell'autore di Sidekiq] (https://github.com/mperham/sidekiq/issues/951#issuecomment-19497803) –

+0

Potrebbe anche essere necessario impostare cookie_serializer con: valore ibrido anziché: json. Maggiori dettagli: https://github.com/rails/rails/issues/15111#issuecomment-43134650 – Francisco

6

Questo in realtà sta accadendo perché BSON :: ObjectId non fa parte di JSON ... quindi quando Sidekiq prova a serializzare gli argomenti per l'operatore, si vomita. Dai un'occhiata a questo commento: https://github.com/mperham/sidekiq/issues/951#issuecomment-19497803

La correzione è semplicemente di convertire gli ID in stringhe durante l'esecuzione di un lavoro del genere:

EmailSubscribe.perform_async(user.id.to_s) 
+0

Ottima soluzione semplice, grazie! – zishe

Problemi correlati