11

我创建了一个 Rails 可安装应用程序并添加了“mongoid”和“rspec”gem。如果我现在尝试运行我的规范,我会收到以下错误:

Mongoid::Errors::NoSessionConfig: 
Problem:
  No configuration could be found for a session named 'default'.
Summary:
  When attempting to create the new session, Mongoid could not find a session configuration for the name: 'default'. This is necessary in order to know the host, port, and options needed to connect.
Resolution:
  Double check your mongoid.yml to make sure under the sessions key that a configuration exists for 'default'. If you have set the configuration programatically, ensure that 'default' exists in the configuration hash.

当我将Mongoid.load!(Rails.root.join("config", "mongoid.yml"))行添加到spec_helper.rb一切正常时。

为什么会这样?我怎样才能获得不需要调用加载函数的普通 Rails 应用程序中的功能?

mongoid.yml

development:
  sessions:
    default:
      database: dummy_development
      hosts:
        - localhost:27017
      options:
  options:
test:
  sessions:
    default:
      database: dummy_test
      hosts:
        - localhost:27017
      options:
        consistency: :strong
        max_retries: 1
        retry_interval: 0

版本:

gem 'rails', '~> 3.2.12'
gem 'mongoid', '~> 3.1'
gem 'rspec-rails', '~> 2.13'
4

6 回答 6

24

您可能错过require 'rails/mongoid'了您的 spec_helper.rb 文件。

有人在这里遇到同样的问题https://github.com/mongoid/mongoid/issues/2894#issuecomment-14903927

尝试添加该要求,这应该可以解决它。

于 2013-03-14T20:16:00.420 回答
5

这在我的机器上对我有用

1:将此添加到您的 config/application.rb

Mongoid.load!("path to your mongoid.yml")

2:并将您的 mongoid.yml 更改为(仅适用于 mongoid 版本 < 5):

development:
  clients:
    default:
      database: database_for_development
        hosts:
          - localhost:27017
test:
  clients:
    default:
      database: database_for_test
        hosts:
          - localhost:27017
production:
  clients:
    default:
      database: database_for_production
        hosts:
          - localhost:27017

到:

development:
  sessions:
    default:
      database: database_for_development
        hosts:
          - localhost:27017
test:
  sessions:
    default:
      database: database_for_test
        hosts:
          - localhost:27017
production:
  sessions:
    default:
      database: database_for_production
        hosts:
          - localhost:27017
于 2016-08-23T13:11:19.597 回答
4

这可能是因为同时存在两个条件:(在 mongoid.yml 中没有生产部分)和(Heroku 默认将 Rails 应用程序视为生产)。

修复其中任何一个就足够了。

1. mongoid.yml中没有生产部分

将生产部分添加到 mongoid.yml,如Heroku中所述,例如

production:
  sessions:
    default:
      uri: <%= ENV['MONGOHQ_URL'] %>
      options:
        skip_version_check: true
        safe: true

2. Heroku 默认将 Rails 应用程序视为生产环境

将 Heroku 环境设置为开发环境,或添加特定于 Heroku 的新环境,如Heroku中所述,例如

heroku config:set RACK_ENV=development RAILS_ENV=development --remote development
于 2013-11-16T15:23:52.093 回答
2

并在对 mongoid.yml 进行更改后重新启动服务器

于 2013-05-21T00:08:04.560 回答
1

我发现这个工作 - 注意没有“会话”,只有“客户”

production:
  clients:
    default:
      uri: <%= ENV['MONGODB_URI'] %>
      options:
        skip_version_check: true
        safe: true
于 2016-07-28T14:42:14.293 回答
0

尝试重新生成一个新的mongoid.yml

rails g mongoid:config

在改变mongoid.yml你的价值观之后。

于 2020-02-23T10:18:26.123 回答