cloner 0.9.1 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48065947b30b56516063f5d9e83b20f365ff9c706471629db00263926a22f398
4
- data.tar.gz: 3baca4e368a95a2dbe0b29d2197169f512e3d0fe7d9ecf2d6576f10590530847
3
+ metadata.gz: 89477dd1dc337b03aeefdff3fad3f9ecbb82f6153d912cff72fde337b19001b8
4
+ data.tar.gz: 0d6b00fa2cd2c4b2f6effc6a75f66bbf64c21e02e77ac5616c8884a3ad67025c
5
5
  SHA512:
6
- metadata.gz: 21c0b290b324a34524427ce8bd2f0b1f2ddd1034a925384c3e2a7aae36c951dbce630ba2a8335ef55b8524f197e2eff8c4097a236186907a328b91e914318ccc
7
- data.tar.gz: 34aa3d7f03dd927193e734e7eb79a99ed4dc5577dd018c873b503f22048b20045c61bdea3361e74042241af8ab3983b11964c12f21bd28a3d4a8f3bf2f13be34
6
+ metadata.gz: 92129b9d34693f0a2e3308f6da7aeadfcbf5b0e4ed6bb39e673fe2a5827e0c337851a6cb507276f8a84466a974373bc9b25e0a134bc62b0401573020386a1121
7
+ data.tar.gz: a3792e1e4430935db00cc4588a21fa20d45065fc720abeccbffd58904a2def9b1155109b15c6d2c76e5a220e1c970852278db4ef47c99532ddc2dcf319c50e44
data/README.md CHANGED
@@ -109,6 +109,24 @@ All functions from cloner/internal.rb can be overriden, for example:
109
109
 
110
110
  ## Changelog
111
111
 
112
+ ### 0.10.0
113
+
114
+ - Support rails 6 multi database activerecord apps via option
115
+
116
+ ```
117
+ def multi_db?
118
+ true
119
+ end
120
+ def clone_databases
121
+ ["primary", "gis"]
122
+ # nil - clone all databases
123
+ end
124
+ ```
125
+
126
+ - Backwards incompatible change:
127
+
128
+ Changed default dump file name to cloner.bak in postgresql to make it same, and to allow to override it and multiple files.
129
+
112
130
  ### 0.9.0
113
131
 
114
132
  - Add option to rsync to allow sync one file (thx @AnatolyShirykalov)
data/cloner.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "thor"
22
22
  spec.add_dependency "activesupport"
23
23
  spec.add_dependency 'net-ssh'
24
+ spec.add_dependency 'fileutils'
24
25
 
25
26
  spec.add_development_dependency "bundler"
26
27
  spec.add_development_dependency "rake"
data/lib/cloner.rb CHANGED
@@ -1,6 +1,8 @@
1
- require "cloner/version"
1
+ require 'cloner/version'
2
2
  require 'thor'
3
3
  require 'active_support/concern'
4
+ require 'fileutils'
5
+
4
6
  module Cloner
5
7
  autoload :Base, "cloner/base"
6
8
  autoload :Internal, "cloner/internal"
data/lib/cloner/ar.rb CHANGED
@@ -1,9 +1,25 @@
1
1
  module Cloner::Ar
2
- def ar_conf
2
+ def read_ar_conf
3
3
  @conf ||= begin
4
- YAML.load_file(Rails.root.join('config', 'database.yml'))[env_database]
4
+ YAML.load(ERB.new(File.read(Rails.root.join('config', 'database.yml'))).result)[env_database]
5
5
  end
6
6
  end
7
+ def ar_conf
8
+ if multi_db?
9
+ read_ar_conf[@current_database]
10
+ else
11
+ read_ar_conf
12
+ end
13
+ end
14
+
15
+ def multi_db?
16
+ false
17
+ end
18
+
19
+ def clone_databases
20
+ # clone all databases by default
21
+ nil
22
+ end
7
23
 
8
24
  def env_database
9
25
  Rails.env
@@ -13,13 +29,13 @@ module Cloner::Ar
13
29
  ar_conf['database']
14
30
  end
15
31
 
16
- def ar_r_conf
32
+ def read_ar_r_conf
17
33
  @ar_r_conf ||= begin
18
34
  do_ssh do |ssh|
19
35
  ret = ssh_exec!(ssh, "cat #{e(remote_app_path + '/config/database.yml')}")
20
36
  check_ssh_err(ret)
21
37
  begin
22
- res = YAML.load(ret[0])[env_from]
38
+ res = YAML.load(ERB.new(ret[0]).result)[env_from]
23
39
  raise 'no data' if res.blank?
24
40
  #res['host'] ||= '127.0.0.1'
25
41
  rescue Exception => e
@@ -32,7 +48,23 @@ module Cloner::Ar
32
48
  end
33
49
  end
34
50
 
35
- def clone_ar
51
+ def db_file_name
52
+ if multi_db?
53
+ "cloner_" + @current_database
54
+ else
55
+ "cloner"
56
+ end
57
+ end
58
+
59
+ def ar_r_conf
60
+ if multi_db?
61
+ read_ar_r_conf[@current_database]
62
+ else
63
+ read_ar_r_conf
64
+ end
65
+ end
66
+
67
+ def run_clone_ar
36
68
  if ar_conf["adapter"] != ar_r_conf["adapter"]
37
69
  puts "Error: ActiveRecord adapter mismatch: local #{ar_conf["adapter"]}, remote #{ar_r_conf["adapter"]}"
38
70
  puts "it is not possible to convert from one database to another via this tool."
@@ -50,5 +82,22 @@ module Cloner::Ar
50
82
  exit
51
83
  end
52
84
  end
85
+
86
+ def clone_ar
87
+ if multi_db?
88
+ dblist = clone_databases
89
+ if dblist.nil?
90
+ dblist = read_ar_conf.keys
91
+ end
92
+ puts "cloning multiple databases: #{dblist.join(", ")}"
93
+ dblist.each do |dbn|
94
+ @current_database = dbn
95
+ run_clone_ar
96
+ end
97
+ @current_database = nil
98
+ else
99
+ run_clone_ar
100
+ end
101
+ end
53
102
  end
54
103
 
data/lib/cloner/mysql.rb CHANGED
@@ -35,7 +35,7 @@ module Cloner::MySQL
35
35
  check_ssh_err(ret)
36
36
  host = ar_r_conf['host'].present? ? " --host #{e ar_r_conf['host']}" : ""
37
37
  port = ar_r_conf['port'].present? ? " --port #{e ar_r_conf['port']}" : ""
38
- dump = "#{my_bin_path 'mysqldump'} #{my_dump_param} --user #{e ar_r_conf['username']} #{my_remote_auth}#{host}#{port} #{e ar_r_conf['database']} > #{e(remote_dump_path + '/cloner.sql')}"
38
+ dump = "#{my_bin_path 'mysqldump'} #{my_dump_param} --user #{e ar_r_conf['username']} #{my_remote_auth}#{host}#{port} #{e ar_r_conf['database']} > #{e(remote_dump_path + '/'+db_file_name+'.sql')}"
39
39
  puts dump if verbose?
40
40
  ret = ssh_exec!(ssh, dump)
41
41
  check_ssh_err(ret)
@@ -46,7 +46,7 @@ module Cloner::MySQL
46
46
  puts "restoring DB"
47
47
  host = ar_conf['host'].present? ? " --host #{e ar_conf['host']}" : ""
48
48
  port = ar_conf['port'].present? ? " --port #{e ar_conf['port']}" : ""
49
- restore = "#{my_bin_path 'mysql'} #{my_restore_param} --user #{e ar_conf['username']} #{my_local_auth}#{host}#{port} #{e ar_to} < #{e(my_path + '/cloner.sql')}"
49
+ restore = "#{my_bin_path 'mysql'} #{my_restore_param} --user #{e ar_conf['username']} #{my_local_auth}#{host}#{port} #{e ar_to} < #{e(my_path + '/'+db_file_name+'.sql')}"
50
50
  puts restore if verbose?
51
51
  pipe = IO.popen(restore)
52
52
  while (line = pipe.gets)
@@ -52,7 +52,7 @@ module Cloner::Postgres
52
52
  check_ssh_err(ret)
53
53
  host = ar_r_conf['host'].present? ? " -h #{e ar_r_conf['host']}" : ""
54
54
  port = ar_r_conf['port'].present? ? " -p #{e ar_r_conf['port']}" : ""
55
- dump = pg_remote_auth + "#{pg_remote_bin_path 'pg_dump'} #{pg_dump_param} -U #{e ar_r_conf['username']}#{host}#{port} #{e ar_r_conf['database']} > #{e(remote_dump_path + '/tmp.bak')}"
55
+ dump = pg_remote_auth + "#{pg_remote_bin_path 'pg_dump'} #{pg_dump_param} -U #{e ar_r_conf['username']}#{host}#{port} #{e ar_r_conf['database']} > #{e(remote_dump_path + '/'+db_file_name+'.bak')}"
56
56
  puts dump if verbose?
57
57
  ret = ssh_exec!(ssh, dump)
58
58
  check_ssh_err(ret)
@@ -63,7 +63,7 @@ module Cloner::Postgres
63
63
  puts "restoring DB"
64
64
  host = ar_conf['host'].present? ? " -h #{e ar_conf['host']}" : ""
65
65
  port = ar_conf['port'].present? ? " -p #{e ar_conf['port']}" : ""
66
- restore = pg_local_auth + "#{pg_local_bin_path 'pg_restore'} #{pg_restore_param} -U #{e ar_conf['username']}#{host}#{port} -d #{e ar_to} #{e(pg_path + '/tmp.bak')}"
66
+ restore = pg_local_auth + "#{pg_local_bin_path 'pg_restore'} #{pg_restore_param} -U #{e ar_conf['username']}#{host}#{port} -d #{e ar_to} #{e(pg_path + '/'+db_file_name+'.bak')}"
67
67
  puts restore if verbose?
68
68
  pipe = IO.popen(restore)
69
69
  while (line = pipe.gets)
data/lib/cloner/rsync.rb CHANGED
@@ -12,8 +12,8 @@ module Cloner::RSync
12
12
 
13
13
  def rsync(from, to, directory: true, raise_on_error: false)
14
14
  if directory
15
- from = "#{from}/" unless from.end_with?('/')
16
- to = "#{to}/" unless to.end_with?('/')
15
+ from = "#{from}/" unless from.to_s.end_with?('/')
16
+ to = "#{to}/" unless to.to_s.end_with?('/')
17
17
  end
18
18
  cmd = "rsync #{rsync_flags} #{e ssh_user}@#{e ssh_host}:#{e from} #{e to}"
19
19
  puts "Running RSync: #{cmd}"
@@ -1,4 +1,4 @@
1
1
  module Cloner
2
- VERSION = "0.9.1"
2
+ VERSION = "0.12.0"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-11 00:00:00.000000000 Z
11
+ date: 2021-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fileutils
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
140
  - !ruby/object:Gem::Version
127
141
  version: '0'
128
142
  requirements: []
129
- rubygems_version: 3.1.4
143
+ rubygems_version: 3.0.3
130
144
  signing_key:
131
145
  specification_version: 4
132
146
  summary: Easily clone your production Mongoid database and files for local development