У меня есть два приложения направляющих (позволяет, называют их APP-1 и APP-2), у каждого из них есть зависимость от третьего приложения направляющих (APP-3).
Я хотел бы смочь запустить тесты для APP-1 и APP-2 параллельно на моем сервере CI. Проблема, обе потребности запустить APP-3 и записать в DB через APP-3. Это вызывает конфликты и отказы, если тесты запущены параллельно.
Моя идея для решения для APP-1, и APP-2 каждому запускают их собственный экземпляр APP-3 и иметь каждую точку экземпляра к различному DB. Существует ли способ динамично установить DB в database.yml APP-3 так, чтобы он соединился с другим DB, в зависимости от которого APP запускает его?
К вашему сведению. APP-1 и APP-2 в настоящее время запускают APP-3 через задачи граблей.
Создайте два файла database.yml для App-3. Назовите их database_A.yml и database_B.yml или как хотите.
В файле environment.rb для App-3 добавьте следующее в конец блока инициализатора.
Rails::Initializer.run do |config|
# ...
# Decide what database_FOO.yml file you care about.
#
db_config_file_name = "database_A.yml" # Put your logic here for choosing which yml file you want.
db_config_file_path = File.join("config", db_config_file_name)
config.database_configuration_file = db_config_file_path if File.exists? db_config_file_path
end
Я взял это из своего блога, где описываю, как я использую другой файл database.yml при запуске приложения с JRuby. Концепция аналогична, так что, надеюсь, вы найдете это полезным. http://www.workingasintended.com/2010/05/03/choosing-a-different-rails-databaseyml-file-for-jruby/