1

这是一个帕德里诺项目。出于某种原因,我将第二个数据库加载到开发环境中,而不是测试环境中。这可能对我的项目非常具体,而且不太可能有人可以提供帮助......但我真的被困住了!:)

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!

但是在我将我的项目移植到帕德里诺之后,这不起作用。我在文档中找不到任何解释原因的内容。

4

2 回答 2

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
于 2011-08-02T19:33:33.857 回答
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
于 2011-07-24T20:49:21.993 回答