Mongoid - 访问模型,在测试数据库中引发错误,但在开发DB(Model.first,Model.all.count等)中工作

时间:2015-10-29 07:32:33

标签: ruby-on-rails mongodb mongoid

我尝试初始化集合时遇到了一些错误。我在控制台中发现了同样的事情。

以下代码在rails console中正常工作,但它会在rails console test中引发以下错误。只有在尝试访问记录时,才会抛出创建Mongoid::Criteria的错误。

irb(main):001:0>  Activity.last
D, [2015-10-29T14:28:25.920178 #39467] DEBUG -- : MONGODB | Adding localhost:27017 to the cluster.
KeyError: key not found: "primary"
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/server_selector.rb:68:in `fetch'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/server_selector.rb:68:in `get'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/client.rb:192:in `read_preference'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/collection.rb:104:in `read_preference'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/collection/view/readable.rb:411:in `default_read'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/collection/view/readable.rb:300:in `read'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/collection/view/iterable.rb:40:in `block in each'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/retryable.rb:46:in `call'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/retryable.rb:46:in `read_with_retry'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongo-2.1.1/lib/mongo/collection/view/iterable.rb:39:in `each'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/query_cache.rb:207:in `each'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:338:in `first'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:338:in `block (2 levels) in last'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:576:in `with_inverse_sorting'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:337:in `block in last'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:489:in `try_cache'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:336:in `last'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/contextual.rb:20:in `last'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mongoid-5.0.0/lib/mongoid/findable.rb:158:in `last'
  from (irb):1
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:110:in `start'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:9:in `start'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:68:in `console'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
  from /Users/USER/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>'
  from bin/rails:4:in `require'

我通常使用Postgres,只要测试数据库中存在问题而不是开发问题,rake db:test:prepare通常会解决问题,但这不起作用。

有什么想法导致这种情况吗?

1 个答案:

答案 0 :(得分:2)

我在这里找到答案:https://groups.google.com/forum/#!topic/ruby-capybara/osI2RqdKEDM

在我的配置中,问题出在mongoid.yml的测试数据库配置中:

test:
  clients:
    default:
      database: db_name
      hosts:
        - localhost:27017
      options:
        read:
          mode: primary
        max_pool_size: 1

我刚删除了这个:

read:
  mode: primary