lib/tasks/apartment.rake
apartment_namespace = namespace :apartment do
desc "Migrate all multi-tenant databases"
task :migrate => 'db:migrate' do
Apartment.database_names.each do |db|
puts("Migrating #{db} database")
Apartment::Migrator.migrate db
end
end
desc "Seed all multi-tenant databases"
task :seed => 'db:seed' do
Apartment.database_names.each do |db|
puts("Seeding #{db} database")
Apartment::Database.process(db) do
Apartment::Database.seed
end
end
end
desc "Rolls the schema back to the previous version (specify steps w/ STEP=n) across all multi-tenant dbs."
task :rollback => 'db:rollback' do
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
Apartment.database_names.each do |db|
puts("Rolling back #{db} database")
Apartment::Migrator.rollback db, step
end
end
namespace :migrate do
desc 'Runs the "up" for a given migration VERSION across all multi-tenant dbs.'
task :up => 'db:migrate:up' do
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
raise 'VERSION is required' unless version
Apartment.database_names.each do |db|
puts("Migrating #{db} database up")
Apartment::Migrator.run :up, db, version
end
end
desc 'Runs the "down" for a given migration VERSION across all multi-tenant dbs.'
task :down => 'db:migrate:down' do
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
raise 'VERSION is required' unless version
Apartment.database_names.each do |db|
puts("Migrating #{db} database down")
Apartment::Migrator.run :down, db, version
end
end
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
task :redo => 'db:migrate:redo' do
if ENV['VERSION']
apartment_namespace['migrate:down'].invoke
apartment_namespace['migrate:up'].invoke
else
apartment_namespace['rollback'].invoke
apartment_namespace['migrate'].invoke
end
end
end
end