capistrano-db-sync 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3db5aa95ae5ba2321304c947c208f0a9a32c8cf1
4
+ data.tar.gz: 512955cd7ea984d1b08bca9b29ae5fea61d5fae5
5
+ SHA512:
6
+ metadata.gz: df7522ed52be6bc89d7623b9d70fa5eed8392ba3a0f0d3b189b8baecf4a3161b5a9eb254909f63ed2bd59dcf3530e99a7bb041b1f800b192fc7c055c4c6615a6
7
+ data.tar.gz: ed4eefff382ff5c36c8d633d34347113f3e203ae2b79495de8bab99b87b0ad9597462e981ba2837ee64d16308614f3fffe7a25c6ea9c1e273b40de0a008e08ee
@@ -0,0 +1,11 @@
1
+ # JetBrains
2
+ .idea
3
+ .project
4
+ .settings
5
+ .idea/*
6
+ *.iml
7
+
8
+ # Gem
9
+ capistrano-db-sync-*
10
+ *.gem
11
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ source "https://rubygems.org"
3
+
4
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
5
+
6
+ # gem "rails"
@@ -0,0 +1,9 @@
1
+ # capistrano-db-sync
2
+
3
+ ### Usage
4
+
5
+ Add the gem to your gemfile:
6
+
7
+ ```ruby
8
+ gem 'capistrano-db-sync'
9
+ ```
@@ -0,0 +1,20 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = 'capistrano-db-sync'
6
+ spec.version = '0.0.1'
7
+ spec.date = Date.today.to_s
8
+ spec.summary = "Capistrano synchronization databases task"
9
+ spec.description = "Capistrano synchronization task for syncing databases between the local development environment and different multi_stage environments"
10
+ spec.authors = ["Albuisson Stéphane"]
11
+ spec.email = 'stephane.albuisson@gmail.com'
12
+ spec.files = `git ls-files`.split("\n")
13
+ spec.homepage = 'http://www.stephane-albuisson.com'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_dependency 'capistrano', '~> 3.1'
20
+ end
File without changes
File without changes
@@ -0,0 +1,57 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../models/database')
2
+
3
+ namespace :db do
4
+
5
+ namespace :sync do
6
+
7
+ task :local_to_remote do
8
+
9
+ on roles(:all) do
10
+ # Backup de la base donnée distante
11
+
12
+ # Création du répertoire de synchronisation
13
+ execute :mkdir, "-p #{shared_path}/sync"
14
+
15
+ # Création du fichier SQL de la base de données locale
16
+ filename = "dump.local.#{Time.now.strftime '%Y-%m-%d_%H-%M-%S'}.sql"
17
+ username, password, database, host = database_config('development')
18
+ system "mysqldump -u #{username} --password=#{password} #{database} > #{filename}"
19
+
20
+ # Export du fichier SQL
21
+ upload! filename, "#{shared_path}/sync/#{filename}"
22
+ system "rm -f #{filename}"
23
+
24
+ # Import de la base de données
25
+ username, password, database, host = remote_database_config(:stage)
26
+ hostcmd = host.nil? ? '' : "-h #{host}"
27
+ execute :mysql, "-u #{username} --password=#{password} #{database} #{hostcmd} < #{shared_path}/sync/#{filename}"
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ def database_config(db)
37
+ database = YAML::load_file('config/database.yml')
38
+ return database["#{db}"]['user'], database["#{db}"]['password'], database["#{db}"]['dbname'], database["#{db}"]['host']
39
+ end
40
+
41
+ def remote_database_config(db)
42
+ remote_config = capture("cat #{shared_path}/config/database.yml")
43
+ database = YAML::load(remote_config)
44
+ return database["#{db}"]['user'], database["#{db}"]['password'], database["#{db}"]['dbname'], database["#{db}"]['host']
45
+ end
46
+
47
+ def purge_old_backups(base)
48
+ count = fetch(:sync_backups, 5).to_i
49
+ backup_files = capture("ls -xt #{shared_path}/sync/#{base}*").split.reverse
50
+ if count >= backup_files.length
51
+ logger.important "no old backups to clean up"
52
+ else
53
+ logger.info "keeping #{count} of #{backup_files.length} sync backups"
54
+ delete_backups = (backup_files - backup_files.last(count)).join(" ")
55
+ try_sudo "rm -rf #{delete_backups}"
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-db-sync
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Albuisson Stéphane
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capistrano
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ description: Capistrano synchronization task for syncing databases between the local
28
+ development environment and different multi_stage environments
29
+ email: stephane.albuisson@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - Gemfile
36
+ - README.md
37
+ - capistrano-db-sync.gemspec
38
+ - lib/capistrano-db-sync.rb
39
+ - lib/capistrano/db-sync.rb
40
+ - lib/capistrano/tasks/db.rake
41
+ homepage: http://www.stephane-albuisson.com
42
+ licenses:
43
+ - MIT
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.6.13
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Capistrano synchronization databases task
65
+ test_files: []