我正在尝试使用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.
任何可能出错的想法?
答案 0 :(得分:13)
看了一会儿之后,我意识到rails 4.1上新的json cookies序列化器会破坏设计资源上的轻量级查询。
要解决此问题,请删除cookies_serializer.rb初始化程序
上的以下行Rails.application.config.action_dispatch.cookies_serializer = :json
您可能希望返回旧的sessions_store.rb文件,内容类似于:
YourApp::Application.config.session_store :cookie_store, key: '_yourapp_session'
或尝试设计的主分支。
看看这里:https://github.com/plataformatec/devise/issues/2949#issuecomment-40520236 在这里:https://github.com/plataformatec/devise/pull/2882
答案 1 :(得分: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
在设计模型中:
class User
devise :database_authenticatable, ...
# NOTE: Has to be after devise
include ZeroOidFix
...
end
希望这个答案能够快速过时。
答案 2 :(得分:0)
从 cookies_serializer.rb
中注释掉以下一行Rails.application.config.action_dispatch.cookies_serializer =:json
删除Cookie。
重启服务器。
在“rails 4.1.4,devise 3.2.4,mongoid 4.0.0”
上为我工作