Установить базу данных в зависимости от того, как было запущено приложение - PullRequest
1 голос
/ 20 мая 2010

У меня есть два приложения Rails (назовем их APP-1 и APP-2), каждое из которых зависит от третьего приложения Rails (APP-3).

Я хотел бы иметь возможность параллельно запускать тесты для APP-1 и APP-2 на моем CI-сервере.Проблема в том, что оба должны запустить APP-3 и записать в БД через APP-3.Это вызывает конфликты и сбои, если тесты выполняются параллельно.

Моя идея для решения состоит в том, чтобы каждый APP-1 и APP-2 запускали свой собственный экземпляр APP-3 и каждый экземпляр указывалдругая БД.Есть ли способ динамически установить базу данных в файле database.yml приложения APP-3, чтобы она подключалась к другой базе данных в зависимости от того, какое приложение запускает ее?

FYI.APP-1 и APP-2 в настоящее время запускают APP-3 с помощью граблей.

1 Ответ

2 голосов
/ 20 мая 2010

Создайте два файла database.yml для App-3. Назовите их database_A.yml и database_B.yml или как хотите.

В файле environment.rb для App-3 добавьте следующее в конец блока Initializer.

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...