2013-02-14 19 views
9

właśnie zaktualizowany do najnowszej wersji (3.1.0) mongoid i sidekiq (2.7.2)
teraz dostaję błąd: failed with error 10068: "invalid operator: $oid"
od patrzenia do kodu widzę coś takiego: @selector={"_id"=>{"$oid"=>"[some id]"}} co może się tu nie udać?

Odpowiedz

7

dodając to do mojego gemfile naprawił problem:

gem 'multi_json', '1.5.1' 

Chyba coś jest nie tak z najnowszej wersji (1.6.0)

EDIT: klejnot został zaktualizowany do nowej wersji (1.6.1), który rozwiązał ten problem. więcej tutaj: https://github.com/intridea/multi_json/issues/89

+0

ta nie działa dla mnie (zobacz moją odpowiedź dla pełniejszego opisu problemu) . – Ben

+0

To już nie jest dokładne, ponieważ Sidekiq upuścił użycie MultiJson na '# perform_async'. Sidekiq używa teraz podstawowego modułu JSON. Zobacz [ten komentarz autora Sidekiq'a] (https://github.com/mperham/sidekiq/issues/951#issuecomment-19497803) –

+0

Może być również konieczne ustawienie cookie_serializer z: wartością hybrydową zamiast: json. Więcej szczegółów: https://github.com/rails/rails/issues/15111#issuecomment-43134650 – Francisco

6

To się rzeczywiście dzieje, ponieważ BSON :: ObjectId nie jest częścią JSON ... więc kiedy Sidekiq próbuje serializacji args do pracownika, to pukes. Sprawdź ten komentarz: https://github.com/mperham/sidekiq/issues/951#issuecomment-19497803

Rozwiązaniem jest po prostu do konwersji identyfikatorów ciągów podczas wykonywania zadania jak:

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

Świetne proste rozwiązanie, dzięki! – zishe

Powiązane problemy