Plusieurs bases de données travaillent dans dev environnement, mais pas le test
-
25-10-2019 - |
Question
Ceci est un projet Padrino. Pour une raison quelconque, je reçois ma deuxième base de données chargée dans l'environnement de développement, mais pas l'environnement de test. Ceci est probablement très spécifique à mon projet, et il est l'aide de quelqu'un peut improbable ... mais je suis vraiment coincé! :)
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
chargé de:
Mongoid.load!(File.dirname(__FILE__) + '/mongoid.yml')
Mon 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
Mon 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!
Mais cela ne fonctionne pas après avoir porté mon projet Padrino. Je ne trouve rien dans la documentation qui explique pourquoi.
La solution
Problème que Rspec utilisation ENV [ "RACK_ENV"], au lieu PADRINO_ENV. Ainsi, dans la ligne boot.rb ajouter pour définir RACK_ENV à PADRINO_ENV:
PADRINO_ENV = ENV["PADRINO_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(PADRINO_ENV)
ENV["RACK_ENV"] = PADRINO_ENV
Autres conseils
J'ai trouvé quelqu'un leur chargement mongoid.yml ainsi sur GitHub, et cela semble fonctionner:
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