多个数据库在开发环境中工作,但不进行测试

时间:2011-07-24 15:19:52

标签: ruby-on-rails ruby mongoid padrino

这是一个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后,这种方法无效。我在文档中找不到解释原因的任何内容。

2 个答案:

答案 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