这是一个Padrino项目。出于某种原因,我在开发环境中加载了第二个数据库,但没有在测试环境中加载。这可能是我的项目非常具体,并且不太可能有人可以提供帮助......但我真的被卡住了! :)
mongoid.yml
defaults: &defaults
host: localhost
port: 27017
max_retries_on_connection_failure: 2
databases:
seeds:
database: seeds_db
host: localhost
port: 27018
development:
<<: *defaults
database: db_development
test:
<<: *defaults
database: db_test
载入:
Mongoid.load!(File.dirname(__FILE__) + '/mongoid.yml')
我的rspec_helper:
PADRINO_ENV = 'test' unless defined?(PADRINO_ENV)
require File.dirname(__FILE__) + "/../config/boot.rb"
RSpec.configure do |conf|
conf.include Rack::Test::Methods
end
我的boot.rb:
PADRINO_ENV = ENV["PADRINO_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(PADRINO_ENV)
PADRINO_ROOT = File.expand_path('../..', __FILE__) unless defined?(PADRINO_ROOT)
require 'rubygems' unless defined?(Gem)
require 'bundler'
Bundler.setup
Bundler.require(PADRINO_ENV, :default)
require 'redis' unless defined?(Redis)
require 'padrino' unless defined?(Padrino)
require 'mongoid' unless defined?(Mongoid)
Dir.glob(File.join(PADRINO_ROOT, 'config/initializers', "*.rb")){ |file| require file}
Dir.glob(File.join(PADRINO_ROOT, 'config/constants', "*.rb")){ |file| require file}
Padrino.before_load do
end
Padrino.after_load do
Card.load!
Position.load!
end
Padrino.load!
但是在将我的项目移植到Padrino后,这种方法无效。我在文档中找不到解释原因的任何内容。
答案 0 :(得分:2)
麻烦Rspec使用ENV [“RACK_ENV”],而不是PADRINO_ENV。 所以在boot.rb中添加行来定义RACK_ENV到PADRINO_ENV:
PADRINO_ENV = ENV["PADRINO_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(PADRINO_ENV)
ENV["RACK_ENV"] = PADRINO_ENV
答案 1 :(得分:0)
我发现有人在github上以这种方式加载他们的mongoid.yml,这似乎有效:
config_file = Padrino.root("config", "mongoid.yml")
if File.exists?(config_file)
settings = YAML.load(ERB.new(File.read(config_file)).result)[Padrino.env.to_s]
::Mongoid.from_hash(settings) if settings.present?
end