cloner 0.8.0 → 0.11.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84c8fe363198647047f69099007af0a106d4820cdc7758b9cae1d26909b79c73
4
- data.tar.gz: e96bc96b11c84cc67d2a06747e379cacdc633eb94e1f435d19227cb2b26c8550
3
+ metadata.gz: 7b194b889c54f1cdbd1a60853f80c463a0f7d15f959f81d42618fd96c67f18ab
4
+ data.tar.gz: 303e8b18314d5041240b08f228d27f93cd89195cbb28edd252bb49f490fe867e
5
5
  SHA512:
6
- metadata.gz: bceec6cdef8aef9384a003ed93607e6d7bb27c22ddf61326b45dee79b17deb92fbbe1806f33405b4882201d9a330a820b44cb84722dab1a7bca4b7e6ffd23142
7
- data.tar.gz: deaa7c11906fd6a184fba2abbe1fc05d510064665aefdf10f0d29e744ab6956687b62dcd37ac88811758412558af564f4fea6af0fb29eb5677ef2cd18237a488
6
+ metadata.gz: 9fcb580d17ae6bacfffd3b5f7209f4e97cee07bc29eca23e86c9220a020bb47e3b0c58fc8b23289b2fa3b560b375207928955b34287b8ae62097e986d7bff71c
7
+ data.tar.gz: 640449403fb0af65d73fa5fcd68c15fc9a414a38c759c89bfae750b8108c4333ead02fcf84fc5b24183ca7bb4d39c6f908c2a5243bfd6c301e0e0c18c563eacd
data/README.md CHANGED
@@ -109,6 +109,29 @@ 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
+
130
+ ### 0.9.0
131
+
132
+ - Add option to rsync to allow sync one file (thx @AnatolyShirykalov)
133
+ - Add env_database to allow overriding database env (thx @Yarroo)
134
+
112
135
  ### 0.8.0
113
136
 
114
137
  - Change default rsync flags - -z to -zz to support newer versions of rsync
data/lib/cloner/ar.rb CHANGED
@@ -1,21 +1,41 @@
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'))[Rails.env]
4
+ YAML.load(ERB.new(File.read(Rails.root.join('config', 'database.yml'))).result)[env_database]
5
+ end
6
+ end
7
+ def ar_conf
8
+ if multi_db?
9
+ read_ar_conf[@current_database]
10
+ else
11
+ read_ar_conf
5
12
  end
6
13
  end
7
14
 
15
+ def multi_db?
16
+ false
17
+ end
18
+
19
+ def clone_databases
20
+ # clone all databases by default
21
+ nil
22
+ end
23
+
24
+ def env_database
25
+ Rails.env
26
+ end
27
+
8
28
  def ar_to
9
29
  ar_conf['database']
10
30
  end
11
31
 
12
- def ar_r_conf
32
+ def read_ar_r_conf
13
33
  @ar_r_conf ||= begin
14
34
  do_ssh do |ssh|
15
35
  ret = ssh_exec!(ssh, "cat #{e(remote_app_path + '/config/database.yml')}")
16
36
  check_ssh_err(ret)
17
37
  begin
18
- res = YAML.load(ret[0])[env_from]
38
+ res = YAML.load(ERB.new(ret[0]).result)[env_from]
19
39
  raise 'no data' if res.blank?
20
40
  #res['host'] ||= '127.0.0.1'
21
41
  rescue Exception => e
@@ -28,7 +48,23 @@ module Cloner::Ar
28
48
  end
29
49
  end
30
50
 
31
- 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
32
68
  if ar_conf["adapter"] != ar_r_conf["adapter"]
33
69
  puts "Error: ActiveRecord adapter mismatch: local #{ar_conf["adapter"]}, remote #{ar_r_conf["adapter"]}"
34
70
  puts "it is not possible to convert from one database to another via this tool."
@@ -46,5 +82,22 @@ module Cloner::Ar
46
82
  exit
47
83
  end
48
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
49
102
  end
50
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)
@@ -65,7 +65,7 @@ module Cloner::MySQL
65
65
  def my_dump_copy
66
66
  FileUtils.mkdir_p(my_path)
67
67
  `mkdir -p #{e my_path}`
68
- rsync(remote_dump_path + '/', my_path)
68
+ rsync(remote_dump_path, my_path)
69
69
  end
70
70
 
71
71
  def clone_my
@@ -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)
@@ -82,7 +82,7 @@ module Cloner::Postgres
82
82
  def pg_dump_copy
83
83
  FileUtils.mkdir_p(pg_path)
84
84
  `mkdir -p #{e pg_path}`
85
- rsync(remote_dump_path + '/', pg_path)
85
+ rsync(remote_dump_path, pg_path)
86
86
  end
87
87
 
88
88
  def clone_pg
data/lib/cloner/rsync.rb CHANGED
@@ -10,8 +10,12 @@ module Cloner::RSync
10
10
  "#{rsync_compression} -utvr --checksum -e \"ssh -p #{port}\""
11
11
  end
12
12
 
13
- def rsync(from, to)
14
- cmd = "rsync #{rsync_flags} #{e ssh_user}@#{e ssh_host}:#{e from}/ #{e to}/"
13
+ def rsync(from, to, directory: true, raise_on_error: false)
14
+ if directory
15
+ from = "#{from}/" unless from.to_s.end_with?('/')
16
+ to = "#{to}/" unless to.to_s.end_with?('/')
17
+ end
18
+ cmd = "rsync #{rsync_flags} #{e ssh_user}@#{e ssh_host}:#{e from} #{e to}"
15
19
  puts "Running RSync: #{cmd}"
16
20
  pipe = IO.popen(cmd)
17
21
  while (line = pipe.gets)
@@ -20,6 +24,9 @@ module Cloner::RSync
20
24
  pipe.close
21
25
  ret = $?.to_i
22
26
  if ret != 0
27
+ if raise_on_error
28
+ raise "Error: local command exited with #{ret}"
29
+ end
23
30
  puts "Error: local command exited with #{ret}"
24
31
  end
25
32
  end
@@ -1,4 +1,4 @@
1
1
  module Cloner
2
- VERSION = "0.8.0"
2
+ VERSION = "0.11.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.8.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -111,7 +111,7 @@ homepage: https://github.com/rs-pro/cloner
111
111
  licenses:
112
112
  - MIT
113
113
  metadata: {}
114
- post_install_message:
114
+ post_install_message:
115
115
  rdoc_options: []
116
116
  require_paths:
117
117
  - lib
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  requirements: []
129
129
  rubygems_version: 3.0.3
130
- signing_key:
130
+ signing_key:
131
131
  specification_version: 4
132
132
  summary: Easily clone your production Mongoid database and files for local development
133
133
  test_files: []