带有rails 4.1和devise的Mongodb错误代码10068或17287

fel*_*ero 5 ruby-on-rails mongodb devise mongoid ruby-on-rails-4.1

我正在尝试使用mailsoid与Rails 4.1.0应用程序,并在moongodb 2.6.0上获得错误17287(与早期版本的mongodb上的10068相同).这是错误消息:

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.
Run Code Online (Sandbox Code Playgroud)

什么可能是错的?

fel*_*ero 13

在寻找一段时间之后,我意识到rails 4.1上的新json cookies序列化器破坏了设计资源上的轻量级查询.

要解决此问题,请删除cookies_serializer.rb初始化程序中的以下行

Rails.application.config.action_dispatch.cookies_serializer = :json
Run Code Online (Sandbox Code Playgroud)

您可能希望返回旧的sessions_store.rb文件,内容类似于:

YourApp::Application.config.session_store :cookie_store, key: '_yourapp_session'
Run Code Online (Sandbox Code Playgroud)

或尝试设计的主分支.

看看这里:https://github.com/plataformatec/devise/issues/2949#issuecomment-40520236 和这里:https://github.com/plataformatec/devise/pull/2882

  • 这导致:ActionView :: Template :: Error(不兼容的编组文件格式(无法读取)格式版本4.8要求; 123.34给出)如果您还没有清除cookie.清除你的cookie,这就消失了. (5认同)

Mir*_*sin 10

暂时,直到轻便摩托/会话/ json格式化修复,我正在使用:

# 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
Run Code Online (Sandbox Code Playgroud)

并在设计模型:

class User

  devise :database_authenticatable, ...

  # NOTE: Has to be after devise
  include ZeroOidFix

  ...
end
Run Code Online (Sandbox Code Playgroud)

希望这个答案能够快速淘汰.