2014-04-15 9 views
5

Sto cercando di utilizzare mongoid con Rails 4.1.0 app e sto ottenendo l'errore 17287 sulla moongodb 2.6.0 (lo stesso di 10068 su versioni precedenti di MongoDB). Ecco il messaggio di errore:MongoDB codice di errore 10068 o 17287 con le rotaie 4.1 e ideare

The operation: #<Moped::Protocol::Query @length=127 @request_id=5 @response_to=0 @op_code=2004 @flags=[] @full_collection_name="educandose_development.users" @skip=0 @limit=-1 @selector={"$query"=>{"_id"=>{"$oid"=>BSON::ObjectId('534d6f4f6372618443000000')}}, "$orderby"=>{:_id=>1}} @fields=nil> failed with error 17287: "Can't canonicalize query: BadValue unknown operator: $oid" See https://github.com/mongodb/mongo/blob/master/docs/errors.md for details about this error. 

Qualsiasi idea di quello che potrebbe essere sbagliato?

risposta

13

Dopo aver guardato per un po ', mi sono reso conto che il nuovo cookie JSON serializzatore su rotaie 4,1 pause query motorini sul risorse testamentaria.

Per rimediare, rimuovere la seguente riga sulla inizializzatore cookies_serializer.rb

Rails.application.config.action_dispatch.cookies_serializer = :json 

Si consiglia di ottenere il vecchio file sessions_store.rb indietro con contenuti simili a:

YourApp::Application.config.session_store :cookie_store, key: '_yourapp_session' 

o prova il ramo principale del progetto.

Date un'occhiata qui: https://github.com/plataformatec/devise/issues/2949#issuecomment-40520236 e qui: https://github.com/plataformatec/devise/pull/2882

+5

Questo poi porta a: ActionView :: Template :: Error (formato di file non compatibile maresciallo (puo' da leggere) \t versione di formato 4.8 richiesta; 123.34 dato) se non sono stati cancellati i cookie. Cancella i cookie e questo va via. –

10

temporaneamente, fino a quando è fissata la formattazione ciclomotore/session/JSON, sto usando:

# app/models/concerns/zero_oid_fix.rb 
module ZeroOidFix 
    extend ActiveSupport::Concern 

    module ClassMethods 
    def serialize_from_session(key, salt) 
     record = to_adapter.get((key[0]["$oid"] rescue nil)) 
     record if record && record.authenticatable_salt == salt 
    end 
    end 
end 

E nel modello devise:

class User 

    devise :database_authenticatable, ... 

    # NOTE: Has to be after devise 
    include ZeroOidFix 

    ... 
end 

Spero che questo risposta sarà ottenere velocemente obsoleti.

+0

Questa correzione ha funzionato per me, grazie. Tuttavia, non capisco perché questo errore sta accadendo e come funziona questa correzione. Potresti spiegare cosa sta succedendo? – yeyo

+0

@Kira BSON ObjectId serializzazione cambiato da immagazzinarla come stringa esadecimale pianura di opporsi '{ "$ OID": "hexstring"}' quindi è più allineato con esteso JSON convenzione formattazione di MongoDB (cambiato in una libreria, ma non l'altro). –

+0

ha lavorato anche per me uno –

0
  1. commento la riga al di sotto della cookies_serializer.rb

    Rails.application.config.action_dispatch.cookies_serializer =: json

  2. Elimina cookie.

  3. Riavviare il server.

Ha lavorato per me su "rotaie 4.1.4, 3.2.4 ideare, mongoid 4.0.0"

Problemi correlati