lib/capones_recipes/tasks/database/sync.rb in capones_recipes-1.10.0 vs lib/capones_recipes/tasks/database/sync.rb in capones_recipes-1.11.0

- old
+ new

@@ -13,34 +13,13 @@ # # Released under the MIT license. # Kindly sponsored by Screen Concept, www.screenconcept.ch # namespace :sync do - - after "deploy:setup", "sync:setup" - - desc <<-DESC - Creates the sync dir in shared path. The sync directory is used to keep - backups of database dumps and archives from synced directories. This task will - be called on 'deploy:setup' - DESC - task :setup do - run "mkdir -p #{shared_path}/sync" - end - namespace :down do desc <<-DESC - Syncs the database and declared directories from the selected multi_stage environment - to the local development environment. This task simply calls both the 'sync:down:db' and - 'sync:down:fs' tasks. - DESC - task :default do - db and fs - end - - desc <<-DESC Syncs database from the selected mutli_stage environement to the local develoment environment. The database credentials will be read from your local config/database.yml file and a copy of the dump will be kept within the shared sync directory. The amount of backups that will be kept is declared in the sync_backups variable and defaults to 5. DESC @@ -72,92 +51,15 @@ # Start db:migrate run_locally "rake db:migrate" end - desc <<-DESC - Sync declared directories from the selected multi_stage environment to the local development - environment. The synced directories must be declared as an array of Strings with the sync_directories - variable. The path is relative to the rails root. - DESC - task :fs, :roles => :web, :once => true do - # Use production on non-multistage - set :stage, 'production' unless exists?(:stage) - - server, port = host_and_port - - Array(fetch(:sync_directories, [])).each do |syncdir| - unless File.directory? "#{syncdir}" - logger.info "create local '#{syncdir}' folder" - Dir.mkdir "#{syncdir}" - end - logger.info "sync #{syncdir} from #{server}:#{port} to local" - destination, base = Pathname.new(syncdir).split - run_locally "rsync --verbose --archive --compress --copy-links --delete --stats --rsh='ssh -p #{port}' #{user}@#{server}:#{current_path}/#{syncdir} #{destination.to_s}" - end - - logger.important "sync filesystem from the stage '#{stage}' to local finished" - end - - namespace :kuhsaft do - - desc <<-DESC - Syncs the database and declared directories from the selected multi_stage environment - to the local development environment. This task simply calls both the 'sync:down:kuhsaft:db' and - 'sync:down:kuhsaft:fs' tasks. - DESC - task :default do - db - end - - desc <<-DESC - Syncs database from the selected mutli_stage environement to the local develoment environment. - The database credentials will be read from your local config/database.yml file and a copy of the - dump will be kept within the shared sync directory. The amount of backups that will be kept is - declared in the sync_backups variable and defaults to 5. - DESC - task :db, :roles => :db, :only => { :primary => true } do - # Use production on non-multistage - set :stage, 'production' unless exists?(:stage) - - filename = "database.kuhsaft.#{stage}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2" - on_rollback { delete "#{shared_path}/sync/#{filename}" } - - # Remote DB dump - username, password, database, host = remote_database_config(stage) - host_option = host ? "--host='#{host}'" : "" - run "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} pages localized_pages contents assets tags taggings | bzip2 -9 > #{shared_path}/sync/#{filename}" do |channel, stream, data| - puts data - end - purge_old_backups "database" - - # Download dump - download "#{shared_path}/sync/#{filename}", filename - - # Local DB import - username, password, database, host = database_config('development') - run_locally "rake db:drop && rake db:create" - run_locally "bzip2 -d -c #{filename} | mysql -u #{username} --password='#{password}' #{database}" - run_locally "rm -f #{filename}" - - logger.important "sync database from the stage '#{stage}' to local finished" - end - end end namespace :up do desc <<-DESC - Syncs the database and declared directories from the local development environment - to the selected multi_stage environment. This task simply calls both the 'sync:up:db' and - 'sync:up:fs' tasks. - DESC - task :default do - db and fs - end - - desc <<-DESC Syncs database from the local develoment environment to the selected mutli_stage environement. The database credentials will be read from your local config/database.yml file and a copy of the dump will be kept within the shared sync directory. The amount of backups that will be kept is declared in the sync_backups variable and defaults to 5. DESC @@ -195,92 +97,10 @@ purge_old_backups "database.all" logger.important "sync database from local to the stage '#{stage}' finished" end - desc <<-DESC - Sync declared directories from the local development environement to the selected multi_stage - environment. The synced directories must be declared as an array of Strings with the sync_directories - variable. The path is relative to the rails root. - DESC - task :fs, :roles => :web, :once => true do - # Use production on non-multistage - set :stage, 'production' unless exists?(:stage) - - server, port = host_and_port - Array(fetch(:sync_directories, [])).each do |syncdir| - destination, base = Pathname.new(syncdir).split - if File.directory? "#{syncdir}" - # Make a backup - logger.info "backup #{syncdir}" - run "tar cjf #{shared_path}/sync/#{base}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.tar.bz2 #{current_path}/#{syncdir}" - purge_old_backups "#{base}" - else - logger.info "Create '#{syncdir}' directory" - run "mkdir #{current_path}/#{syncdir}" - end - - # Sync directory up - logger.info "sync #{syncdir} to #{server}:#{port} from local" - run_locally "rsync --verbose --archive --compress --keep-dirlinks --delete --stats --rsh='ssh -p #{port}' #{syncdir} #{user}@#{server}:#{current_path}/#{destination.to_s}" - end - logger.important "sync filesystem from local to the stage '#{stage}' finished" - end - - namespace :kuhsaft do - - desc <<-DESC - Syncs the database and declared directories from the local development environment - to the selected multi_stage environment. This task simply calls both the 'sync:up:kuhsaft:db' task. - DESC - task :default do - db - end - - desc <<-DESC - Syncs database from the local develoment environment to the selected mutli_stage environement. - The database credentials will be read from your local config/database.yml file and a copy of the - dump will be kept within the shared sync directory. The amount of backups that will be kept is - declared in the sync_backups variable and defaults to 5. - DESC - task :db, :roles => :db, :only => { :primary => true } do - # Use production on non-multistage - set :stage, 'production' unless exists?(:stage) - - filename = "database.kuhsaft.#{stage}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2" - - on_rollback do - delete "#{shared_path}/sync/#{filename}" - run_locally "rm -f #{filename}" - end - - # Make a backup before importing - username, password, database, host = remote_database_config(stage) - host_option = host ? "--host='#{host}'" : "" - run "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} pages localized_pages contents assets tags taggings | bzip2 -9 > #{shared_path}/sync/#{filename}" do |channel, stream, data| - puts data - end - - # Local DB export - filename = "dump.local.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2" - username, password, database, host = database_config('development') - host_option = host ? "--host='#{host}'" : "" - run_locally "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} | bzip2 -9 > #{filename}" - upload filename, "#{shared_path}/sync/#{filename}" - run_locally "rm -f #{filename}" - - # Remote DB import - username, password, database, host = remote_database_config(stage) - host_option = host ? "--host='#{host}'" : "" - run "bzip2 -d -c #{shared_path}/sync/#{filename} | mysql -u #{username} --password='#{password}' #{host_option} #{database}" - run "rm -f #{shared_path}/sync/#{filename}" - purge_old_backups "database.kuhsaft" - - logger.important "sync database from local to the stage '#{stage}' finished" - end - end - end # # Reads the database credentials from the local config/database.yml file # +db+ the name of the environment to get the credentials for @@ -306,24 +126,9 @@ # # Returns the actual host name to sync and port # def host_and_port return roles[:web].servers.first.host, ssh_options[:port] || roles[:web].servers.first.port || 22 - end - - # - # Purge old backups within the shared sync directory - # - def purge_old_backups(base) - count = fetch(:sync_backups, 5).to_i - backup_files = capture("ls -xt #{shared_path}/sync/#{base}*").split.reverse - if count >= backup_files.length - logger.important "no old backups to clean up" - else - logger.info "keeping #{count} of #{backup_files.length} sync backups" - delete_backups = (backup_files - backup_files.last(count)).join(" ") - try_sudo "rm -rf #{delete_backups}" - end end end end