根据应用程序的启动方式设置数据库

时间:2010-05-20 01:33:10

标签: ruby-on-rails database continuous-integration

我有两个Rails应用程序(让我们称之为APP-1和APP-2),每个应用程序都依赖于第三个Rails应用程序(APP-3)。

我希望能够在我的CI服务器上并行运行APP-1和APP-2的测试。问题是,两者都需要启动APP-3并通过APP-3写入数据库。如果测试并行运行,这会导致冲突和失败。

我的解决方案是让APP-1和APP-2各自启动自己的APP-3实例并让每个实例指向不同的数据库。有没有办法在APP-3的database.yml中动态设置数据库,以便根据哪个APP启动它连接到不同的数据库?

FYI。 APP-1和APP-2目前通过rake任务启动APP-3。

1 个答案:

答案 0 :(得分:2)

为App-3制作两个database.yml文件。称他们为database_A.yml和database_B.yml或任何你想要的。

在App-3的environment.rb文件中,在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

我从我的博客中提取了这个内容,在这里我描述了当我使用JRuby启动应用程序时如何使用不同的database.yml文件。这个概念是相似的,所以希望你觉得这很有帮助。 http://www.workingasintended.com/2010/05/03/choosing-a-different-rails-databaseyml-file-for-jruby/