internetee-registry/lib/tasks/db.rake

108 lines
3.7 KiB
Ruby

namespace :db do
def other_databases
@db ||= ["api_log_#{Rails.env}", "whois_#{Rails.env}"]
end
def schema_file(db)
case db
when "api_log_#{Rails.env}"
'api_log_schema.rb'
when "whois_#{Rails.env}"
'whois_schema.rb'
end
end
namespace :all do
desc 'Create all databases: registry, api_log and whois'
task setup: [:environment] do
Rake::Task['db:all:create'].invoke
Rake::Task['db:all:schema:load'].invoke
Rake::Task['db:seed'].invoke
end
desc 'Create all databases: registry, api_log and whois'
task create: [:environment] do
puts "\n---------------------------- Create main database ----------------------------------------\n"
Rake::Task['db:create'].invoke
other_databases.each do |name|
begin
puts "\n---------------------------- Create #{name} ----------------------------------------\n"
ActiveRecord::Base.clear_all_connections!
conf = ActiveRecord::Base.configurations
ActiveRecord::Base.connection.create_database(conf[name]['database'].to_sym, conf[name])
rescue => e
puts "\n#{e}"
end
end
end
desc 'Drop all databaseses: registry, api_log and whois'
task drop: [:environment] do
# just in case we allow only drop test, comment it out please for temp
return unless Rails.env.test?
puts "\n---------------------------- Drop main database ----------------------------------------\n"
Rake::Task['db:drop'].invoke
other_databases.each do |name|
begin
puts "\n---------------------------- #{name} dropped ----------------------------------------\n"
ActiveRecord::Base.clear_all_connections!
ActiveRecord::Base.establish_connection(name.to_sym)
conf = ActiveRecord::Base.configurations
if ActiveRecord::Tasks::DatabaseTasks.drop(conf[name])
puts "#{conf[name]['database']} dropped"
else
puts "Didn't find database #{name}, no drop"
end
rescue => e
puts "\n#{e}"
end
end
end
namespace :schema do
desc 'Schema load for all databases: registry, api_log and whois'
task load: [:environment] do
puts "\n---------------------------- Main schema load ----------------------------------------\n"
Rake::Task['db:schema:load'].invoke
other_databases.each do |name|
begin
puts "\n---------------------------- #{name} schema loaded ----------------------------------------\n"
ActiveRecord::Base.clear_all_connections!
ActiveRecord::Base.establish_connection(name.to_sym)
if ActiveRecord::Base.connection.table_exists?('schema_migrations')
puts 'Found tables, skip schema load!'
else
load("#{Rails.root}/db/#{schema_file(name)}")
end
rescue => e
puts "\n#{e}"
end
end
end
desc 'Schema load for all databases: registry, api_log and whois'
task dump: [:environment] do
puts "\n---------------------------- Main schema load ----------------------------------------\n"
Rake::Task['db:schema:dump'].invoke
other_databases.each do |name|
begin
puts "\n---------------------------- #{name} ----------------------------------------\n"
filename = "#{Rails.root}/db/#{schema_file(name)}"
File.open(filename, 'w:utf-8') do |file|
ActiveRecord::Base.establish_connection(name)
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
end
rescue => e
puts "\n#{e}"
end
end
end
end
end
end