lib/tasks/import.rake
# encoding: utf-8
namespace :db do
desc 'Dump production DB to backup.sql'
task :dump => :environment do
server_config = ActiveRecord::Base.configurations["production"]
remote_db = server_config["database"]
user_name = server_config["username"]
password = server_config["password"]
system("nice -n15 mysqldump --opt --add-drop-table -hlocalhost -u#{user_name} -p#{password} #{remote_db} > backup.sql")
end
desc 'Import remote production database to local database'
task :import => :environment do
puts "Your lokal database will be overwritten by server db! Are you sure? (yes)"
input = STDIN.gets.strip
if ["yes", "Yes", "Y", "y", "YES"].include?(input)
local_config = ActiveRecord::Base.configurations["development"]
if defined?(Capistrano) == "constant"
puts "Loading remote configuration..."
config = Capistrano::Configuration.new
config.load("Capfile")
config.logger.level = 1
ssh_user = config[:user]
ssh_server = config[:ip_address]
deploy_to = config[:deploy_to]
puts "Connecting to #{ssh_user}@#{ssh_server} and generating db dump..."
system("cap invoke COMMAND='cd #{deploy_to}/current && RAILS_ENV=production bundle exec rake db:dump'")
puts "MysqlDump created on server as 'backup.sql'. Transfering data..."
local_db_password = ""
if local_config['password'].present?
local_db_password = "-p#{local_config['password']}"
end
system("ssh -C #{ssh_user}@#{ssh_server} less #{deploy_to}/current/backup.sql |mysql -u#{local_config['username']} #{local_db_password} #{local_config['database']}")
puts "Dumpfile copied and transfered to local DB: #{local_config['username']}@#{local_config['database']}"
else
remote_db = ENV['REMOTE']
user_name = ENV['USER']
password = ENV['PASSWORD']
server = ENV['SERVER']
if server.present? &&
system("ssh -C #{server} mysqldump --opt --add-drop-table -hlocalhost -u#{user_name} -p#{password} #{remote_db} |mysql -u#{local_config['username']} -p#{local_config['password']} #{local_config['database']}")
else
puts "Missing Attributes! e.g.:"
puts "rake db:import SERVER=taurus REMOTE=db_qvnia USER=user_qvnia PASSWORD=yq1rx5qiHIz"
end
end
else
puts "Import-Task aborted"
end
end
namespace :schema do
desc 'Regenerates data in table schema_migrations from local files in multiple folders like db/migrate. Usage rake db... PATH=db/migrate,foo/baar,test/dummy/db/migrate'
task :regnerate => :environment do
migrations_path = ENV["PATH"] || ""
raise "PATH=db/migrations missing" if migrations_path.blank?
file_list = []
migrations_path.split(",").each do |mp|
Dir.foreach(mp) do |file|
# only files matching "20091231235959_some_name.rb" pattern
if match_data = /(\d{14})_(.+)\.rb/.match(file)
file_list << match_data[1]
end
end
end
#Temporäre classe SchemaMigration um die Dtaen bequemer in die DB zu bekommen
class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; attr_accessible :version; end
SchemaMigration.destroy_all
file_list.sort.each do |fl|
SchemaMigration.create(:version => fl)
end
end
end
end