From 06fa481c77dcfa2b4d7f962ab60a7361dfe6c597 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Mon, 20 Oct 2014 20:26:07 +0300 Subject: [PATCH 1/5] adding task to backup DB --- lib/capistrano-db-tasks/dbtasks.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/capistrano-db-tasks/dbtasks.rb b/lib/capistrano-db-tasks/dbtasks.rb index 13e01e3..9faf5cb 100644 --- a/lib/capistrano-db-tasks/dbtasks.rb +++ b/lib/capistrano-db-tasks/dbtasks.rb @@ -30,6 +30,13 @@ end end end + + desc 'Dumps database to db folder after that we can take it from there' + task :backup do + on roles(:db) do + Database.backup(self) + end + end end namespace :local do From 6ba93182e1f8fe3e51d6149e0779ab4f69f32b22 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Mon, 20 Oct 2014 20:28:12 +0300 Subject: [PATCH 2/5] implementation of DB backup --- lib/capistrano-db-tasks/database.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/capistrano-db-tasks/database.rb b/lib/capistrano-db-tasks/database.rb index 79f5f10..73a3a89 100644 --- a/lib/capistrano-db-tasks/database.rb +++ b/lib/capistrano-db-tasks/database.rb @@ -229,5 +229,10 @@ def local_to_remote(instance) remote_db.load(local_db.output_file, instance.fetch(:db_local_clean)) File.unlink(local_db.output_file) if instance.fetch(:db_local_clean) end + + def backup(instance) + remote_db = Database::Remote.new(instance) + remote_db.dump + end end end From 9062880915b1697713597c8b4eac6990c5249a52 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Mon, 20 Oct 2014 20:32:36 +0300 Subject: [PATCH 3/5] update README about backup --- README.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/README.markdown b/README.markdown index 4e43b13..3508b6b 100644 --- a/README.markdown +++ b/README.markdown @@ -77,6 +77,7 @@ Available tasks db:local:sync || db:pull # Synchronize your local database using remote database data db:remote:sync || db:push # Synchronize your remote database using local database data + db:remote:backup # Dumps database to db folder after that we can take it from there Example ======= From ee461aea798cf0f6df47571747f016339120e468 Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Thu, 7 Apr 2016 20:00:10 +0300 Subject: [PATCH 4/5] Add db:remote:restore_latest task --- lib/capistrano-db-tasks/compressors/bzip2.rb | 2 +- lib/capistrano-db-tasks/database.rb | 6 ++++++ lib/capistrano-db-tasks/dbtasks.rb | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/capistrano-db-tasks/compressors/bzip2.rb b/lib/capistrano-db-tasks/compressors/bzip2.rb index dd34436..782089e 100644 --- a/lib/capistrano-db-tasks/compressors/bzip2.rb +++ b/lib/capistrano-db-tasks/compressors/bzip2.rb @@ -32,7 +32,7 @@ def decompress(from, to = nil) "-c --stdout > #{to}" end - "bunzip2 -f #{from} #{to}" + "bunzip2 -k -f #{from} #{to}" end end diff --git a/lib/capistrano-db-tasks/database.rb b/lib/capistrano-db-tasks/database.rb index 73a3a89..a6bc2c7 100644 --- a/lib/capistrano-db-tasks/database.rb +++ b/lib/capistrano-db-tasks/database.rb @@ -121,6 +121,7 @@ def initialize(cap_instance) def dump @cap.execute "cd #{@cap.current_path} && #{dump_cmd} | #{compressor.compress('-', output_file)}" + @cap.execute("ln -fs #{@cap.current_path}/#{output_file} #{@cap.current_path}/db/latest.sql.#{compressor.file_extension}") self end @@ -234,5 +235,10 @@ def backup(instance) remote_db = Database::Remote.new(instance) remote_db.dump end + + def restore_latest(instance) + remote_db = Database::Remote.new(instance) + remote_db.load("#{instance.current_path}/db/latest.sql.#{remote_db.compressor.file_extension}", true) + end end end diff --git a/lib/capistrano-db-tasks/dbtasks.rb b/lib/capistrano-db-tasks/dbtasks.rb index 9faf5cb..fc6de8e 100644 --- a/lib/capistrano-db-tasks/dbtasks.rb +++ b/lib/capistrano-db-tasks/dbtasks.rb @@ -37,6 +37,13 @@ Database.backup(self) end end + + desc 'Restores the latest database dump from the remote folder (pairs with db:remote:backup)' + task :restore_latest do + on roles(:db) do + Database.restore_latest(self) + end + end end namespace :local do From d6c3ef5c71c74a83670b3dcca2dcee0e49c62adb Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Fri, 8 Apr 2016 12:32:58 +0300 Subject: [PATCH 5/5] Also download the generated dump on the db:remote:backup task --- lib/capistrano-db-tasks/database.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/capistrano-db-tasks/database.rb b/lib/capistrano-db-tasks/database.rb index a6bc2c7..aecf6ae 100644 --- a/lib/capistrano-db-tasks/database.rb +++ b/lib/capistrano-db-tasks/database.rb @@ -234,6 +234,7 @@ def local_to_remote(instance) def backup(instance) remote_db = Database::Remote.new(instance) remote_db.dump + remote_db.download end def restore_latest(instance)