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 {|pool| pool.connection}
I’ve filed a bug at lighthouseapp.