added rake db:all:setup and friends

This commit is contained in:
Priit Tark 2015-01-16 18:02:19 +02:00
parent 545e828fdf
commit e20e577914
6 changed files with 153 additions and 87 deletions

73
lib/tasks/db.rake Normal file
View file

@ -0,0 +1,73 @@
namespace :db do
def databases
@db ||= ["#{Rails.env}", "api_log_#{Rails.env}", "whois_#{Rails.env}"]
end
def schema_file(db)
case db
when databases.first
'schema.rb'
when databases.second
'api_log_schema.rb'
when databases.third
'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
databases.each do |name|
begin
conf = ActiveRecord::Base.configurations
ActiveRecord::Base.clear_all_connections!
ActiveRecord::Base.connection.create_database(conf[name]['database'], conf[name])
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
databases.each do |name|
begin
puts "\n---------------------------- #{name} ----------------------------------------\n"
ActiveRecord::Base.establish_connection(name)
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
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

View file

@ -1,53 +0,0 @@
DATABASES = [
{ database: 'whois_public', host: 'localhost', adapter: 'postgresql', encoding: 'unicode',
pool: '5', username: 'whois', password: 'test', port: '5432' },
{ database: 'whois_private', host: 'localhost', adapter: 'postgresql', encoding: 'unicode',
pool: '5', username: 'whois', password: 'test', port: '5432' }
]
namespace :whois do
task :load_config do
require 'active_record'
require 'pg'
end
desc 'Create whois databases'
task create: [:load_config] do
DATABASES.each do |conf|
create_database(conf)
migrate
end
end
task 'Migrate whois databases'
task migrate: [:load_config] do
DATABASES.each do |conf|
ActiveRecord::Base.establish_connection(conf)
migrate
end
end
def create_database(conf)
ActiveRecord::Base.establish_connection(conf.merge(database: 'postgres'))
ActiveRecord::Base.connection.create_database(conf[:database])
ActiveRecord::Base.establish_connection(conf)
end
def migrate
CreateWhoisBase.up
end
end
class CreateWhoisBase < ActiveRecord::Migration
def self.up
create_table :domains do |t|
t.string :name
t.text :body
t.timestamps
end
end
def self.down
drob_table :domains
end
end