The Vqmetrics application needs to connect to two different databases. The first holds the videos, authors and their relevant statistics, while the second database holds the users, monitors and trackers.
We do this by specifying two databases in config/database.yml.
development:
database: vqmetrics_devel
< <: *login_dev_local
vqdata_development: &VQDATA_TEST
database: vqdata_devel
<<: *login_dev_local
So by default the vqmetrics_devel database will be used. When we need to specify a model where we need to connect to the vqdata_devel database we use
class Video < ActiveRecord::Base
establish_connection "vqdata_#{RAILS_ENV}"
end
and for migrations that need to connect to this database we do the following.
class InitialSetup < ActiveRecord::Migration
def self.connection
Video.connection
end
end
This setup works really well. However recently I moved this application to using Cucumber for testing. Tests worked fine the first time they are run but not the second time.
I discovered that the transaction on the second database where not being rolled back as they should be. Cucumber only sets up the first database for roll back by using
ActiveRecord::Base.connection
where it should be rolling them all back by looping through
ActiveRecord::Base.connection_handler.connection_pools.values.map do |pool|
pool.connection
end
I’ve filed a bug at lighthouseapp.
Leave a Reply