activerecord multiple databases

So, I was looking for a setup that would allow me to easily query multiple databases and not have to re-write my customer finder type queries. Here is what I came up with and it seems to be working for me in my very basic tests so I thought I'd share. Just posting it in case this helps anyone else trying to do the same thing.

I'm using this with activerecord, but not rails, so there may be some adjustments needed if you are trying to incorporate this into rails.

module Project   DBCONFIG = YAML::load(File.open('database.yml'))

  module ConnectionFactory     class DB1 < ActiveRecord::Base       self.establish_connection(Project::DBCONFIG['db1'])     end     class DB2 < ActiveRecord::Base       self.establish_connection(Project::DBCONFIG['db2'])     end   end

  module ClassMethods     module SomeClassName       def long_query(name)         r = find_by_sql ["SELECT ...",name]         r.first unless r.empty?       end     end     module SomeOtherClass       def long_query(number)         r = find_by_sql ["SELECT ...",name]         r.first unless r.empty?       end     end   end

end

module DB1   class SomeClassName < Project::ConnectionFactory::DB1     set_table_name "thetable"     extend Project::ClassMethods::SomeClassName   end   class SomeOtherClass < Project::ConnectionFactory::DB1     set_table_name "theothertable"     extend Project::ClassMethods::SomeOtherClass   end end

module DB2   class SomeClassName < Project::ConnectionFactory::DB2     set_table_name "thetable"     extend Project::ClassMethods::SomeClassName   end   class SomeOtherClass < Project::ConnectionFactory::DB2     set_table_name "theothertable"     extend Project::ClassMethods::SomeOtherClass   end end

# queries db1 DB1::SomeClassName.long_query(name) DB1::SomeOtherClass.long_query(name)

# queries db2 DB2::SomeClassName.long_query(name) DB2::SomeOtherClass.long_query(name)