2013-02-14 8 views
9

chỉ được cập nhật lên phiên bản mới nhất của mongoid (3.1.0) và sidekiq (2.7.2)
bây giờ tôi đang nhận được lỗi: failed with error 10068: "invalid operator: $oid"
từ tìm kiếm vào mã tôi thấy một lựa chọn như thế: @selector={"_id"=>{"$oid"=>"[some id]"}}
điều gì có thể xảy ra ở đây?

Trả lời

7

thêm này để gemfile của tôi cố định vấn đề:

gem 'multi_json', '1.5.1' 

tôi đoán cái gì là sai với phiên bản mới nhất (1.6.0)

EDIT: viên ngọc đã được cập nhật lên phiên bản mới (1.6.1) đã khắc phục vấn đề này. nhiều hơn ở đây: https://github.com/intridea/multi_json/issues/89

+0

này không làm việc cho tôi (xem câu trả lời của tôi cho một mô tả đầy đủ hơn về vấn đề này) . – Ben

+0

Điều này không còn chính xác nữa, bởi vì Sidekiq đã giảm mức sử dụng MultiJson trên '# perform_async'. Sidekiq hiện sử dụng mô-đun JSON chính. Xem [bình luận này bởi tác giả của Sidekiq] (https://github.com/mperham/sidekiq/issues/951#issuecomment-19497803) –

+0

Bạn cũng có thể cần phải đặt cookie_serializer với: giá trị lai thay vì: json. Chi tiết hơn: https://github.com/rails/rails/issues/15111#issuecomment-43134650 – Francisco

6

Điều này thực sự xảy ra vì BSON :: ObjectId không phải là một phần của JSON ... vì vậy khi Sidekiq cố gắng tuần tự hóa args cho nhân viên, nó pukes. Xem comment này: https://github.com/mperham/sidekiq/issues/951#issuecomment-19497803

Việc sửa chữa chỉ đơn giản là để chuyển đổi ID để dây khi thực hiện một công việc như:

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

Giải pháp đơn giản tuyệt vời, cảm ơn! – zishe