2010-05-20 6 views
1

J'ai deux applications Rails (appelons-les APP-1 et APP-2), chacune d'elles dépend d'une troisième application Rails (APP-3).Définir la base de données en fonction du démarrage de l'application

Je voudrais être en mesure d'exécuter les tests pour APP-1 et APP-2 en parallèle sur mon serveur CI. Le problème est, à la fois besoin de démarrer APP-3 et écrire à une base de données via l'APP-3. Cela provoque des conflits et des échecs si les tests sont exécutés en parallèle.

Mon idée pour une solution est que APP-1 et APP-2 lancent chacune leur propre instance d'APP-3 et que chaque instance pointe vers un DB différent. Existe-t-il un moyen de définir dynamiquement la base de données dans le database.yml de APP-3 afin qu'il se connecte à un autre DB en fonction de quelle APP le lance?

FYI. APP-1 et APP-2 lancent actuellement APP-3 via des tâches de rake.

Répondre

2

Créez deux fichiers database.yml pour App-3. Appelez-les database_A.yml et database_B.yml ou ce que vous voulez.

Dans votre fichier environment.rb pour App-3, ajoutez ce qui suit à la fin du bloc 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 

je tire cela de mon blog, où je décris comment j'utiliser un fichier database.yml différent lorsque je lance mon application avec JRuby. Le concept est similaire, donc j'espère que vous trouverez cela utile. http://www.workingasintended.com/2010/05/03/choosing-a-different-rails-databaseyml-file-for-jruby/