При использовании двух быз данный конфиг ко второй был описан в пердыдущем посте появляется задача в миграциях и тестах.
В качестве выходя из данной ситуации было решено для тестов сваливать все таблицы в одну базу так проще разрабатывать и тестить. По этому был переписан всего один рейк так который будет дампить две базы в один файл schema.rb
lib/tasks/db_migrations.rake
namespace :db do
namespace :schema do
desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
task :dump => :environment do
require 'active_record/schema_dumper'
File.open(ENV['SCHEMA'] || "db/schema.rb", "w") do |file|
ActiveRecord::SchemaDumper.dump([ActiveRecord::Base.connection, MarketingDb.connection], file)
end
end
end
end
для напоминания приведу еще раз models/marketing_db.rb
class MarketingDb < ActiveRecord::Base
self.abstract_class = true
establish_connection("marketing_db_#{RAILS_ENV}".to_sym) unless RAILS_ENV.eql?('test')
end
Добавляем в application.rb загрузку нашей библиотеки которая переопределает ActiveRecord::SchemaDumper.dump
require 'multi_db' #rake task for dump 2 databases
-----------------------------
#file lib/multi_db.rb
module ActiveRecord
class SchemaDumper
#Create dump.rb for many databases
def self.dump(array_connects, stream=STDOUT)
array_connects = array_connects || ActiveRecord::Base.connection
if array_connects.is_a?(Array)
array_connects.each { |connect|
new(connect).dump(stream, connect.eql?(array_connects.first), connect.eql?(array_connects.last))
}
else
new(array_connects).dump(stream)
end
stream
end
def dump(stream, is_header = false, is_footer = false)
header(stream) if is_header
tables(stream)
trailer(stream) if is_footer
stream
end
end
end
#и немного доопределим что бы миграции нормально проходили и переключались между базами в этом же файле lib/multi_db.rb
module ActiveRecord
class Migration
def self.use_db(db_name)
ActiveRecord::Base.establish_connection("#{db_name}_#{RAILS_ENV}".to_sym)
end
def self.restore_connection
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
end
end
end
и теперь дошли до самого файла миграции
class CreateMdbProducts < ActiveRecord::Migration
def self.up
use_db('marketing_db')
create_table :mdb_products do |t|
t.string :description, :null => false
t.timestamps
end
restore_connection
end
def self.down
use_db('marketing_db')
drop_table :mdb_products
restore_connection
end
end