我创建了一个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'
答案 0 :(得分:20)
您可能错过了spec_helper.rb文件中的require 'rails/mongoid'
。
如果有人在这里遇到同样的问题https://github.com/mongoid/mongoid/issues/2894#issuecomment-14903927
尝试添加需要修复的内容。
答案 1 :(得分:4)
这可能是因为两个同时发生的情况:( mongoid.yml中没有生产部分)AND(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
答案 2 :(得分:2)
在更改mongoid.yml
后重启服务器答案 3 :(得分:1)
我发现这个工作 - 注意没有&#34;会话&#34;,只有&#34;客户&#34;
production:
clients:
default:
uri: <%= ENV['MONGODB_URI'] %>
options:
skip_version_check: true
safe: true
答案 4 :(得分:0)
尝试重新生成新的mongoid.yml
:
rails g mongoid:config
并在更改mongoid.yml
后使用您的值。