copy_db_from_prod 0.0.1 → 0.0.2
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 +4 -4
- data/bin/copy_db_from_prod +1 -1
- data/lib/copy_db_from_prod.rb +37 -7
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3304f3a840aae3a772dcd7ee6a0c15978d0a9d6e
|
|
4
|
+
data.tar.gz: eef944dcfc6e25a7434082f670fba43548b080ff
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2dbafac3077cae23f82ea84827eff4a1c5de20c202ae33f98363638742f96c53ca745c2de7d9d13f31e374c4c4a4be9754f78a1f3c3dde12f3dbc3fdd10a6550
|
|
7
|
+
data.tar.gz: cf2ca1887b2d161d2540a5323d1c1fb79ca72a4da550d3294ecc7ee5cc9aa1936304906f44f5b569decc6b0da4a0a05a7d4788ccae1ee9eb1805cc24ad6b854f
|
data/bin/copy_db_from_prod
CHANGED
|
@@ -7,7 +7,7 @@ def echo_wrong_args
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def echo_help
|
|
10
|
-
puts("copy_db_from_prod -h <host> -u <user> -p <path>
|
|
10
|
+
puts("copy_db_from_prod -h <host> -u <user> -p <path> --schema-only
|
|
11
11
|
<user> - default 'deploy'
|
|
12
12
|
<path> - default '/projects/insales3', without / at the end")
|
|
13
13
|
end
|
data/lib/copy_db_from_prod.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'yaml'
|
|
|
3
3
|
require 'pg'
|
|
4
4
|
|
|
5
5
|
class CopyDbFromProd
|
|
6
|
-
attr_accessor :cf
|
|
6
|
+
attr_accessor :cf, :conn
|
|
7
7
|
|
|
8
8
|
def self.hi
|
|
9
9
|
puts "Hello world!"
|
|
@@ -21,12 +21,21 @@ class CopyDbFromProd
|
|
|
21
21
|
|
|
22
22
|
def download_schema
|
|
23
23
|
Net::SSH.start(cf[:host], cf[:user], key_data: cf[:keys], keys_only: TRUE) do |ssh|
|
|
24
|
-
|
|
24
|
+
yml_text = ssh.exec!("cat #{cf[:deploy_to]}/config/database.yml")
|
|
25
|
+
begin
|
|
26
|
+
@prod_conf ||= YAML.load(yml_text)['production']
|
|
27
|
+
rescue => e
|
|
28
|
+
raise "Can't access to database.yml, check -p params\n #{e}"
|
|
29
|
+
end
|
|
25
30
|
prod_data = ssh.exec!(dump_schema)
|
|
26
31
|
if prod_data.include?('pg_dump') || prod_data.include?('warn')
|
|
27
|
-
raise "error: pg_dump dosen't work correct
|
|
32
|
+
raise "error: pg_dump dosen't work correct\n #{prod_data}"
|
|
28
33
|
else
|
|
29
|
-
|
|
34
|
+
begin
|
|
35
|
+
return Zlib::GzipReader.new(StringIO.new(prod_data)).read
|
|
36
|
+
rescue => e
|
|
37
|
+
raise "#{e}\n #{prod_data}"
|
|
38
|
+
end
|
|
30
39
|
end
|
|
31
40
|
end
|
|
32
41
|
end
|
|
@@ -40,18 +49,39 @@ class CopyDbFromProd
|
|
|
40
49
|
"#{cmd.join(' ')} --schema-only --no-owner --no-privileges -Z9"
|
|
41
50
|
end
|
|
42
51
|
|
|
52
|
+
def drop_restore_table
|
|
53
|
+
conn.exec("SELECT table_name
|
|
54
|
+
FROM information_schema.tables
|
|
55
|
+
WHERE table_schema = 'public'
|
|
56
|
+
AND table_name LIKE '%_201%'
|
|
57
|
+
ORDER BY table_name"
|
|
58
|
+
) do |result|
|
|
59
|
+
conn.exec(result.map { |row| "DROP TABLE #{row['table_name']}" }.join(';'))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
43
63
|
def load_schema
|
|
44
64
|
@dev_conf = YAML.load(File.open('config/database.yml', 'r').read)['development']
|
|
45
|
-
conn = PGconn.open(host: @dev_conf['host'],
|
|
65
|
+
@conn = PGconn.open(host: @dev_conf['host'],
|
|
46
66
|
dbname: 'postgres',
|
|
47
67
|
user: @dev_conf['username'],
|
|
48
68
|
password: @dev_conf['password'])
|
|
49
69
|
conn.exec("DROP DATABASE IF EXISTS #{@dev_conf['database']}")
|
|
50
70
|
conn.exec("CREATE DATABASE #{@dev_conf['database']}")
|
|
51
|
-
conn = PGconn.open(host: @dev_conf['host'],
|
|
71
|
+
@conn = PGconn.open(host: @dev_conf['host'],
|
|
52
72
|
dbname: @dev_conf['database'],
|
|
53
73
|
user: @dev_conf['username'],
|
|
54
74
|
password: @dev_conf['password'])
|
|
55
|
-
|
|
75
|
+
schema = download_schema
|
|
76
|
+
begin
|
|
77
|
+
conn.exec(schema)
|
|
78
|
+
rescue => e
|
|
79
|
+
raise "Database #{@dev_conf['database']}\n#{e}\n #{schema}"
|
|
80
|
+
end
|
|
81
|
+
drop_restore_table if 'insales_dev' == @dev_conf['database']
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def copy_env_table
|
|
85
|
+
|
|
56
86
|
end
|
|
57
87
|
end
|