'蒙戈:: OperationFailure'对于Rails中的某些操作

时间:2015-12-30 08:59:52

标签: ruby-on-rails mongodb

我是Mongo的新手。我已经从this来源安装了Mongodb。我正在使用mongodb进行Rails应用程序。启动mongodb和rails后应用程序加载正常。但是,当我尝试登录时失败。当我尝试在rails控制台中执行某些操作时,会发生同样的事情。

这里是型号代码:

  def self.authenticate(email, password)
    user = find(:first, :conditions => {:email => email})
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      user
    else
     nil
    end
  end

if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)

失败

这是一个简短的错误:

  

数据库命令'创建'失败:{" ok" => 0.0," errmsg" =>"集合已经存在","代码" => 48 }

并且,完整的应用程序错误跟踪:

  

mongo(1.3.1)lib / mongo / db.rb:506:在command' mongo (1.3.1) lib/mongo/db.rb:284:in create_collection'   mongoid(2.2.1)lib / mongoid / collections / master.rb:41:in initialize' mongoid (2.2.1) lib/mongoid/collection.rb:127:in new'   mongoid(2.2.1)lib / mongoid / collection.rb:127:在master' mongoid (2.2.1) lib/mongoid/collection.rb:60:in find_one'   mongoid(2.2.1)lib / mongoid / contexts / mongo.rb:164:in first' mongoid (2.2.1) lib/mongoid/criteria.rb:42:in one'   mongoid(2.2.1)lib / mongoid / criterion / inclusion.rb:104:in find' mongoid (2.2.1) lib/mongoid/finders.rb:83:in find'   actionpack(3.0.3)lib / action_controller / metal / implicit_render.rb:4:在send_action' actionpack (3.0.3) lib/abstract_controller/base.rb:151:in process_action'   actionpack(3.0.3)lib / action_controller / metal / rendering.rb:11:在process_action'中的process_action' actionpack (3.0.3) lib/abstract_controller/callbacks.rb:18:in块中   activesupport(3.0.3)lib / active_support / callbacks.rb:435:in _run__902337259577170033__process_action__4476240526817474042__callbacks' activesupport (3.0.3) lib/active_support/callbacks.rb:409:in _ run_process_action_callbacks'   activesupport(3.0.3)lib / active_support / callbacks.rb:93:在run_callbacks' actionpack (3.0.3) lib/abstract_controller/callbacks.rb:17:in process_action'   actionpack(3.0.3)lib / action_controller / metal / instrumentation.rb:30:在block in process_action' activesupport (3.0.3) lib/active_support/notifications.rb:52:in块中的仪器'   activesupport(3.0.3)lib / active_support / notifications / instrumenter.rb:21:in instrument' activesupport (3.0.3) lib/active_support/notifications.rb:52:in instrument'   actionpack(3.0.3)lib / action_controller / metal / instrumentation.rb:29:在process_action' actionpack (3.0.3) lib/action_controller/metal/rescue.rb:17:in process_action'   actionpack(3.0.3)lib / abstract_controller / base.rb:120:在process' actionpack (3.0.3) lib/abstract_controller/rendering.rb:40:in进程'   actionpack(3.0.3)lib / action_controller / metal.rb:138:在dispatch' actionpack (3.0.3) lib/action_controller/metal/rack_delegation.rb:14:in发送'   actionpack(3.0.3)lib / action_controller / metal.rb:178:block in action' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:62:in来电'   actionpack(3.0.3)lib / action_dispatch / routing / route_set.rb:62:in dispatch' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:27:in call'   rack-mount(0.6.14)lib / rack / mount / route_set.rb:148:在block in call' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:93:in块中识别'   rack-mount(0.6.14)lib / rack / mount / code_generation.rb:75:in optimized_each' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:92:in识别'   rack-mount(0.6.14)lib / rack / mount / route_set.rb:139:call' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:492:in来电'   mongoid(2.2.1)lib / rack / mongoid / middleware / identity_map.rb:33:in block in call' mongoid (2.2.1) lib/mongoid.rb:130:in unit_of_work'   mongoid(2.2.1)lib / rack / mongoid / middleware / identity_map.rb:33:in call' actionpack (3.0.3) lib/action_dispatch/middleware/best_standards_support.rb:17:in call'   actionpack(3.0.3)lib / action_dispatch / middleware / head.rb:14:in call' rack (1.2.4) lib/rack/methodoverride.rb:24:in call'   actionpack(3.0.3)lib / action_dispatch / middleware / params_parser.rb:21:in call' actionpack (3.0.3) lib/action_dispatch/middleware/flash.rb:182:in call'   actionpack(3.0.3)lib / action_dispatch / middleware / session / abstract_store.rb:149:在call' actionpack (3.0.3) lib/action_dispatch/middleware/cookies.rb:295:in电话'   actionpack(3.0.3)lib / action_dispatch / middleware / callbacks.rb:46:in block in call' activesupport (3.0.3) lib/active_support/callbacks.rb:415:in _ run_call_callbacks'   actionpack(3.0.3)lib / action_dispatch / middleware / callbacks.rb:44:in call' rack (1.2.4) lib/rack/sendfile.rb:106:in call'   actionpack(3.0.3)lib / action_dispatch / middleware / remote_ip.rb:48:in call' actionpack (3.0.3) lib/action_dispatch/middleware/show_exceptions.rb:46:in call'   railties(3.0.3)lib / rails / rack / logger.rb:13:in call' rack (1.2.4) lib/rack/runtime.rb:17:in来电'   activesupport(3.0.3)lib / active_support / cache / strategy / local_cache.rb:72:in call' rack (1.2.4) lib/rack/lock.rb:11:in阻止呼叫'   rack(1.2.4)lib / rack / lock.rb:11:in synchronize' rack (1.2.4) lib/rack/lock.rb:11:in call'   actionpack(3.0.3)lib / action_dispatch / middleware / static.rb:30:in call' railties (3.0.3) lib/rails/application.rb:168:in call'   railties(3.0.3)lib / rails / application.rb:77:in method_missing' railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in来电'   rack(1.2.4)lib / rack / content_length.rb:13:in call' rack (1.2.4) lib/rack/handler/webrick.rb:52:in service'   /Users/reonios/.rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/webrick/httpserver.rb:138:in service' /Users/reonios/.rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/webrick/httpserver.rb:94:in run'   /Users/reonios/.rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/webrick/server.rb:295:in在start_thread中阻止'

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在检查代码和谷歌搜索后,我发现每个请求都发送了一个特殊字符。我的请求参数是这样的:

{  
   "utf8"=>"✓",
   "authenticity_token"=>"cAcdDOzfBgalF5em+97mTKw9DAjymfmEmG6hc+dDqhQ=",
   "email"=>"super_admin_user@test.com",
   "password"=>"[FILTERED]",
   "commit"=>"Login"
}

不确定是什么引发了'â''。但谷歌的一篇文章称,2.2系列中存在与此相关的错误,并且已在以后的版本中修复。

所以,我发现我的 mongoid 版本为2.2.1,一旦升级,问题就解决了。

注意:我是 mongoid 的新手,并提供了一个知识匮乏的解决方案。如果需要,请添加详细信息。