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
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)
希望这个答案能够快速淘汰.