我有两个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。
答案 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/