我有两个Rails应用程序(让我们称它们为APP-1和APP-2),每个应用程序都依赖于第三个Rails应用程序(APP-3)。
我希望能够在CI服务器上并行运行APP-1和APP-2的测试。问题是,两者都需要启动APP-3并通过APP-3写入数据库。如果测试并行运行,则会导致冲突和失败。
我的解决方案是让APP-1和APP-2各自启动自己的APP-3实例,并让每个实例指向不同的DB。有没有办法在APP-3的database.yml中动态设置数据库,使其根据启动的应用程序连接到不同的数据库?
仅供参考。APP-1和APP-2目前通过rake任务启动APP-3。
发布于 2010-05-20 14:08:22
为App-3制作两个database.yml文件。你可以叫他们database_A.yml和database_B.yml或者其他任何你想要的名字。
在App-3的environment.rb文件中,在初始化程序块的末尾添加以下内容。
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/
https://stackoverflow.com/questions/2870516
复制相似问题