Project

General

Profile

Download (2.56 KB) Statistics
| Branch: | Tag: | Revision:
namespace :db do
desc "Make a dump of your database"
task :dump => :environment do
config = Rails.configuration.database_configuration[Rails.env]
backup_name = "foreman.#{Time.now.to_i}.sql"
case config['adapter']
when 'mysql', 'mysql2'
mysql_dump(backup_name, config)
when 'postgresql'
postgres_dump(backup_name, config)
when 'sqlite'
backup_name = "foreman.#{Time.now.to_i}.sqlite_copy"
sqlite_dump(backup_name, config)
else
puts 'Your database is not supported by Foreman.' and exit(1)
end

puts "Backup in file #{backup_name}"
end

def mysql_dump(name, config)
cmd = "mysqldump --opt #{config['database']} -u #{config['username']} "
cmd += " -p#{config['password']} " if config['password'].present?
cmd += " -h #{config['host']} " if config['host'].present?
cmd += " -P #{config['port']} " if config['port'].present?
cmd += " > #{name}"
system(cmd)
end

def postgres_dump(name, config)
cmd = "pg_dump -Fc #{config['database']} -U #{config['username']} "
cmd += " -h #{config['host']} " if config['host'].present?
cmd += " -p #{config['port']} " if config['port'].present?
cmd += " > #{name}"
system({'PGPASSWORD' => config['password']}, cmd)
end

def sqlite_dump(name, config)
FileUtils.cp config['database'], name
end

desc 'Import your database dump'
task :import_dump => :environment do
puts "Run this task with a file argument with the location of your db dump,
'rake db:import_dump file=DBDUMPLOCATION" and return unless ENV['file']
config = Rails.configuration.database_configuration[Rails.env]

case config['adapter']
when 'mysql', 'mysql2'
mysql_import(ENV['file'], config)
when 'postgresql'
postgres_import(ENV['file'], config)
else
puts 'Your database dump cannot be imported by Foreman.' and exit(1)
end
end

def mysql_import(file, config)
cmd = "mysql #{config['database']} -u #{config['username']} "
cmd += " -p#{config['password']} " if config['password'].present?
cmd += " -h #{config['host']} " if config['host'].present?
cmd += " -P #{config['port']} " if config['port'].present?
cmd += " < #{file}"
system(cmd)
end

def postgres_import(file, config)
cmd = "pg_restore -d #{config['database']} -U #{config['username']} "
cmd += " -h #{config['host']} " if config['host'].present?
cmd += " -p #{config['port']} " if config['port'].present?
cmd += " #{file}"
system({'PGPASSWORD' => config['password']}, cmd)
system(cmd)
end
end
(1-1/23)