pg_db_helper 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/izi_dump +4 -0
- data/bin/izi_fork +4 -0
- data/bin/izi_load +4 -0
- data/config.yml.sample +10 -0
- data/lib/config_worker.rb +32 -0
- data/lib/db_helper.rb +396 -0
- data/lib/dump.rb +42 -0
- data/lib/fork.rb +38 -0
- data/lib/load.rb +49 -0
- metadata +55 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d38d2b29ab312298567d0f0026e830c083fbd7f6
|
4
|
+
data.tar.gz: 1563113cd7c354f79b3fb2cb636a292573fd743a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 623b877a734e032613fcec1b3014e196cea41a4f09dd0d3f17ae9bce1fbacaf5ba47a50805aa4b7af56f623db51f88440d902a41cb1bcb806ce8186c44a8893b
|
7
|
+
data.tar.gz: 2ad582b2bf6510f7a291670b64ac0e7905e854cb3c49aa8633fce5b1466660acef2c774dfb92f19b3075d1342c15b5f8ec749e45866c4303759251d0af84174c
|
data/bin/izi_dump
ADDED
data/bin/izi_fork
ADDED
data/bin/izi_load
ADDED
data/config.yml.sample
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
def keys_to_sym src
|
4
|
+
if src.is_a? Array
|
5
|
+
src.map {|item| keys_to_sym item}
|
6
|
+
elsif src.is_a? Hash
|
7
|
+
Hash[src.map {|k, v| ["#{k}".to_sym, keys_to_sym(v)]}]
|
8
|
+
else
|
9
|
+
src
|
10
|
+
end
|
11
|
+
end
|
12
|
+
def keys_to_str src
|
13
|
+
if src.is_a? Array
|
14
|
+
src.map {|item| keys_to_str item}
|
15
|
+
elsif src.is_a? Hash
|
16
|
+
Hash[src.map {|k, v| [k.to_s, keys_to_str(v)]}]
|
17
|
+
else
|
18
|
+
src
|
19
|
+
end
|
20
|
+
end
|
21
|
+
def get_hash_file filename
|
22
|
+
if File.exist?(filename)
|
23
|
+
keys_to_sym YAML.load_file(filename)
|
24
|
+
else
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
def put_hash_file filename, props
|
29
|
+
File.open(filename, 'w') do |f|
|
30
|
+
f.write((keys_to_str props).to_yaml)
|
31
|
+
end
|
32
|
+
end
|
data/lib/db_helper.rb
ADDED
@@ -0,0 +1,396 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'optparse'
|
4
|
+
require 'yaml'
|
5
|
+
require 'pp'
|
6
|
+
require_relative 'config_worker'
|
7
|
+
|
8
|
+
class DbHelper
|
9
|
+
def self.get_configs()
|
10
|
+
@working_dir = Dir.pwd
|
11
|
+
@sysdir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
12
|
+
unless File.exists?(File.join(@sysdir, 'config.yml'))
|
13
|
+
p "No config file. Creating default one."
|
14
|
+
FileUtils.cp(File.join(@sysdir, 'config.yml.sample'), File.join(@sysdir, 'config.yml'))
|
15
|
+
p "Please correct your config file at:"
|
16
|
+
p "#{File.join(@sysdir, 'config.yml')}"
|
17
|
+
end
|
18
|
+
|
19
|
+
@config = get_hash_file File.join(@sysdir, 'config.yml')
|
20
|
+
|
21
|
+
@db_yml_file = @config[:db_yml_file]
|
22
|
+
@db_sample_file = @config[:db_sample_file]
|
23
|
+
@dump_store = @config[:dump_store]
|
24
|
+
|
25
|
+
@db_config = get_hash_file File.join(@working_dir, @db_yml_file)
|
26
|
+
# pp @config
|
27
|
+
# pp @db_config
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.save_db_config!()
|
31
|
+
put_hash_file File.join(@working_dir, @db_yml_file), @db_config
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.dump!(options={})
|
35
|
+
@db_config.keys.each do |env|
|
36
|
+
if ((options[:branch]==:all) || env.to_s.start_with?(options[:branch].to_s))
|
37
|
+
param = @db_config[env]
|
38
|
+
dumpname = options[:file]
|
39
|
+
dumpname = File.join([@dump_store, dumpname]) unless options[:relative]
|
40
|
+
p "dump <#{env}> to file: #{dumpname}"
|
41
|
+
# pp param
|
42
|
+
system "
|
43
|
+
PGPASSWORD='#{param[:password]}'
|
44
|
+
pg_dump -U #{param[:username]} -h #{param[:host]} #{param[:database]} > #{dumpname}
|
45
|
+
"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.fork!(options={})
|
51
|
+
dumps = {}
|
52
|
+
@db_config.keys.each do |env|
|
53
|
+
if ((options[:branch]==:all) || env.to_s.start_with?(options[:branch].to_s))
|
54
|
+
param = @db_config[env]
|
55
|
+
timestamp = Time.now.strftime('%Y%m%dT%H%M%S%z')
|
56
|
+
dumps[env] = File.join([@dump_store, "#{param[:database]}_#{timestamp}.sql"])
|
57
|
+
p "dump <#{env}> to file: #{dumps[env]}"
|
58
|
+
# pp param
|
59
|
+
system "
|
60
|
+
PGPASSWORD='#{param[:password]}'
|
61
|
+
pg_dump -U #{param[:username]} -h #{param[:host]} #{param[:database]} > #{dumps[env]}
|
62
|
+
"
|
63
|
+
new_db_name = options[:name] + param[:database].gsub(/.+?(_db)?(_test)?(_db)?/i, '\1\2\3')
|
64
|
+
@db_config[env][:database] = new_db_name
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
p "All backups created!"
|
70
|
+
save_db_config!
|
71
|
+
|
72
|
+
@db_config.keys.each do |env|
|
73
|
+
if ((options[:branch]==:all) || env.to_s.start_with?(options[:branch].to_s))
|
74
|
+
param = @db_config[env]
|
75
|
+
p "load <#{env}> from file: #{dumps[env]}"
|
76
|
+
# pp param
|
77
|
+
system "RAILS_ENV=#{env} bundle exec rake db:drop"
|
78
|
+
system "RAILS_ENV=#{env} bundle exec rake db:create"
|
79
|
+
system "RAILS_ENV=#{env} bundle exec rake db:migrate"
|
80
|
+
system "
|
81
|
+
PGPASSWORD='#{param[:password]}'
|
82
|
+
psql -U #{param[:username]} -h #{param[:host]} #{param[:database]} < #{dumps[env]}
|
83
|
+
"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.load!(options={})
|
89
|
+
@db_config.keys.each do |env|
|
90
|
+
if ((options[:branch]==:all) || env.to_s.start_with?(options[:branch].to_s))
|
91
|
+
param = @db_config[env]
|
92
|
+
dumpname = options[:file]
|
93
|
+
dumpname = File.join([@dump_store, dumpname]) unless options[:relative]
|
94
|
+
p "load <#{env}> from file: #{dumpname}"
|
95
|
+
# pp param
|
96
|
+
if options[:clean]
|
97
|
+
system "bundle exec rake db:drop"
|
98
|
+
system "bundle exec rake db:create"
|
99
|
+
system "bundle exec rake db:migrate"
|
100
|
+
end
|
101
|
+
system "
|
102
|
+
PGPASSWORD='#{param[:password]}'
|
103
|
+
psql -U #{param[:username]} -h #{param[:host]} #{param[:database]} < #{dumpname}
|
104
|
+
"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
# @options = Parser.new do |p|
|
111
|
+
# p.banner = "This is a db helper, for usage see below"
|
112
|
+
# p.version = "db helper 0.0 alpha"
|
113
|
+
# # p.option :severity, "set severity", :default => 4, :value_in_set => [4,5,6,7,8]
|
114
|
+
# # p.option :verbose, "enable verbose output"
|
115
|
+
# # p.option :mutation, "set mutation", :default => "MightyMutation", :value_matches => /Mutation/
|
116
|
+
# # p.option :plus_selection, "use plus-selection if set", :default => true
|
117
|
+
# # p.option :selection, "selection used", :default => "BestSelection", :short => "l"
|
118
|
+
# # p.option :chance, "set mutation chance", :default => 0.8, :value_satisfies => lambda {|x| x >= 0.0 && x <= 1.0}
|
119
|
+
# p.option :dump, "dump app DB to dumpstore folder", default: ''
|
120
|
+
# p.option :load, "load DB from dump file stored in dumpstore folder", default: ''
|
121
|
+
# p.option :migrate, "backup DB, drop, migrate and restore it from backup file stored in dumpstore folder (only development)", default: ''
|
122
|
+
# p.option :fork, "forks DB from current and dump it", short: 'F', default: ''
|
123
|
+
# p.option :apply, "apply DB from dump", default: ''
|
124
|
+
# p.option :file, "name of dump DB from dumpstore folder", default: ''
|
125
|
+
# p.option :bundle, "bundle update & push to git", default: ''
|
126
|
+
# p.option :api, "sattelite api for bundle update", default: ''
|
127
|
+
# p.option :gem, "gem name for bundle update", default: ''
|
128
|
+
# end.process!
|
129
|
+
|
130
|
+
# def get_dumpname(db_name = nil, env)
|
131
|
+
# log @options
|
132
|
+
# log @options[:file]
|
133
|
+
# if @options[:file]
|
134
|
+
# File.join(@dump_store, @options[:file])
|
135
|
+
# else
|
136
|
+
# File.join(@dump_store, "dump_#{db_name}_#{env}.db")
|
137
|
+
# end
|
138
|
+
# end
|
139
|
+
|
140
|
+
# def current_time
|
141
|
+
# Time.now.getlocal.strftime('%H:%M:%S')
|
142
|
+
# end
|
143
|
+
|
144
|
+
# def log(st)
|
145
|
+
# STDOUT << "#{current_time} #{st}\n"
|
146
|
+
# end
|
147
|
+
|
148
|
+
# def pparams(param)
|
149
|
+
# (param.map{|k, v| "#{k}: #{v}, " unless k.to_sym==:password}.join()).chomp(', ').gsub(", ", "\n#{' '*5}- ")
|
150
|
+
# end
|
151
|
+
|
152
|
+
# def keys_to_sym src
|
153
|
+
# dst = {}
|
154
|
+
# src.each do |k, v|
|
155
|
+
# dst[k.to_sym] = v.is_a?(Hash) ? keys_to_sym(v) : v
|
156
|
+
# end
|
157
|
+
# dst
|
158
|
+
# end
|
159
|
+
# def keys_to_str src
|
160
|
+
# dst = {}
|
161
|
+
# src.each do |k, v|
|
162
|
+
# dst[k.to_s] = v.is_a?(Hash) ? keys_to_str(v) : v
|
163
|
+
# end
|
164
|
+
# dst
|
165
|
+
# end
|
166
|
+
|
167
|
+
# def get_db_prop filename
|
168
|
+
# if File.exist?(filename)
|
169
|
+
# keys_to_sym YAML.load_file(filename)
|
170
|
+
# else
|
171
|
+
# @db_yml_sample_hash
|
172
|
+
# end
|
173
|
+
# end
|
174
|
+
|
175
|
+
# def put_db_prop filename, props
|
176
|
+
# File.open(filename, 'w') do |f|
|
177
|
+
# f.write((keys_to_str props).to_yaml)
|
178
|
+
# end
|
179
|
+
# end
|
180
|
+
|
181
|
+
# def dump_db(param = {}, dumpname)
|
182
|
+
# # dumpname = get_dumpname(param[:database], environment)
|
183
|
+
# param = @default_params.merge(param)
|
184
|
+
# log "dump db: \n#{pparams(param)} \nto >>> #{dumpname}"
|
185
|
+
|
186
|
+
# system "PGPASSFILE=<(echo #{param[:host]}:#{param[:port]}:#{param[:database]}:#{param[:username]}:#{param[:password]})
|
187
|
+
# pg_dump -U #{param[:username]} -h #{param[:host]} #{param[:database]} > #{dumpname}"
|
188
|
+
|
189
|
+
# log "dump finished"
|
190
|
+
# end
|
191
|
+
|
192
|
+
# def load_db(param = {}, dumpname)
|
193
|
+
# param = @default_params.merge(param)
|
194
|
+
# log "load db: from >>> #{dumpname}\n - With params:\n#{pparams(param)}"
|
195
|
+
|
196
|
+
# system "PGPASSFILE=<(echo #{param[:host]}:#{param[:port]}:#{param[:database]}:#{param[:username]}:#{param[:password]})
|
197
|
+
# psql -U #{param[:username]} -h #{param[:host]} #{param[:database]} < #{dumpname}"
|
198
|
+
|
199
|
+
# log "load finished"
|
200
|
+
# end
|
201
|
+
|
202
|
+
# def load_prop(env=:development)
|
203
|
+
# all_prop = get_db_prop @db_yml_file
|
204
|
+
# all_prop[env]
|
205
|
+
# end
|
206
|
+
|
207
|
+
# def reset_migrate
|
208
|
+
# param = load_prop
|
209
|
+
# dumpname = File.join(@dump_store, "dump_#{param[:database]}_t#{Time.now.to_i}.db")
|
210
|
+
# dump_db param, dumpname
|
211
|
+
# system 'rake db:drop'
|
212
|
+
# log 'db dropped'
|
213
|
+
# system 'rake db:create'
|
214
|
+
# log 'new db created'
|
215
|
+
# system 'rake db:migrate'
|
216
|
+
# log 'db migrated'
|
217
|
+
# load_db param, dumpname
|
218
|
+
# log 'stored db dump removed'
|
219
|
+
# system "rm #{dumpname}"
|
220
|
+
# log 'stored db dump removed'
|
221
|
+
# end
|
222
|
+
|
223
|
+
# def fork_db database
|
224
|
+
# # new_prop, old_prop = change_db_config("database"=> "#{@options[:fork]}")
|
225
|
+
# full_params = get_db_prop @db_yml_file
|
226
|
+
|
227
|
+
# dumpnames = {}
|
228
|
+
# full_params.each do |env, param|
|
229
|
+
# if env.to_s =~ /dev/
|
230
|
+
# dumpname = File.join(@dump_store, "dump_#{param[:database]}_t#{Time.now.to_i}.db")
|
231
|
+
# dumpnames[env] = dumpname
|
232
|
+
# dump_db param, dumpname
|
233
|
+
# full_params[env][:database] = database + full_params[env][:database].gsub(/.+?(_db)?(_test)?(_db)?/i, '\1\2\3')
|
234
|
+
# end
|
235
|
+
# end
|
236
|
+
|
237
|
+
# put_db_prop @db_yml_file, full_params
|
238
|
+
|
239
|
+
# full_params.each do |env, param|
|
240
|
+
# if env.to_s =~ /dev/
|
241
|
+
# system "rake db:drop RAILS_ENV=#{env}"
|
242
|
+
# log 'db dropped'
|
243
|
+
# system "rake db:create RAILS_ENV=#{env}"
|
244
|
+
# log 'new db created'
|
245
|
+
# system "rake db:migrate RAILS_ENV=#{env}"
|
246
|
+
# log 'db migrated'
|
247
|
+
# load_db param, dumpnames[env]
|
248
|
+
# log 'stored db dump removed'
|
249
|
+
# system "rm #{dumpnames[env]}"
|
250
|
+
# log 'stored db dump removed'
|
251
|
+
# end
|
252
|
+
# end
|
253
|
+
# log 'db fork created'
|
254
|
+
# end
|
255
|
+
|
256
|
+
# def env?(prop)
|
257
|
+
# env = %r[(^|\W)(#{prop}\w*)].match(@db_yml_sample_hash.keys().join(', '))
|
258
|
+
# env = env[2].to_sym if env
|
259
|
+
# env
|
260
|
+
# end
|
261
|
+
|
262
|
+
# def dump_db1(dump_store = '~/www/db/dump_')
|
263
|
+
# log 'Dump app DB...'
|
264
|
+
# if File.exist?(@db_yml_file)
|
265
|
+
# props = get_db_prop @db_yml_file
|
266
|
+
# if props.is_a?(Hash) && (props.size > 0)
|
267
|
+
# props.each_pair do |env, param|
|
268
|
+
# if !!(@options[:dump].index env) || !!(@options[:dump].index 'all')
|
269
|
+
# log "environment - #{env}"
|
270
|
+
# log "dump - '#{param['database']}' to '#{dump_store}#{param['database']}_#{env}.db'"
|
271
|
+
# system "PGPASSFILE=<(echo #{param['host']}:#{param['port']}:#{param['database']}:#{param['username']}:#{param['password']}) pg_dump -U #{param['username']} -h #{param['host']} #{param['database']} > #{dump_store}#{param['database']}_#{env}.db"
|
272
|
+
# # pg_dump -U dev -h localhost -W force_db > ../dump
|
273
|
+
# # psql -U dev -h localhost -W force_db < ../dump
|
274
|
+
# end
|
275
|
+
# end
|
276
|
+
# log "dump finished"
|
277
|
+
# else
|
278
|
+
# log 'ERROR - DB not found, please dump it by yourself!'
|
279
|
+
# end
|
280
|
+
# else
|
281
|
+
# log 'ERROR - database.yml not found!'
|
282
|
+
# end
|
283
|
+
|
284
|
+
# end
|
285
|
+
|
286
|
+
# def load_db1(dump_store = '~/www/db/dump_')
|
287
|
+
# log 'Load DB from dump...'
|
288
|
+
# if File.exist?(@db_yml_file)
|
289
|
+
# props = get_db_prop @db_yml_file
|
290
|
+
# if props.is_a?(Hash) && (props.size > 0)
|
291
|
+
# props.each_pair do |env, param|
|
292
|
+
# if !!(@options[:dump].index env) || !!(@options[:dump].index 'all')
|
293
|
+
# log "environment - #{env}"
|
294
|
+
# log "load - '#{param['database']}' from '#{dump_store}#{param['database']}_#{env}.db'"
|
295
|
+
# if File.exist?("#{dump_store}#{param['database']}_#{env}.db")
|
296
|
+
# system "PGPASSFILE=<(echo #{param['host']}:#{param['port']}:#{param['database']}:#{param['username']}:#{param['password']}) psql -U #{param['username']} -h #{param['host']} #{param['database']} < #{dump_store}#{param['database']}_#{env}.db"
|
297
|
+
# else
|
298
|
+
# log "ERROR - dump file not found, please make sure file '#{dump_store}#{param['database']}_#{env}.db' exists!"
|
299
|
+
# end
|
300
|
+
# # pg_dump -U dev -h localhost -W force_db > ../dump
|
301
|
+
# # psql -U dev -h localhost -W force_db < ../dump
|
302
|
+
# end
|
303
|
+
# end
|
304
|
+
# log "dump finished"
|
305
|
+
# else
|
306
|
+
# log 'ERROR - DB not found, please dump it by yourself!'
|
307
|
+
# end
|
308
|
+
# end
|
309
|
+
# end
|
310
|
+
|
311
|
+
# def sattelites apiV=nil
|
312
|
+
# if apiV
|
313
|
+
# Dir.glob(File.expand_path("~/www/api_v#{apiV}/*/"))
|
314
|
+
# else
|
315
|
+
# Dir.glob(File.expand_path('~/www/api_v*/*/'))
|
316
|
+
# end
|
317
|
+
# end
|
318
|
+
|
319
|
+
# def bundleUpdate sats=[], gemName=nil
|
320
|
+
# log 'Bundle update...'
|
321
|
+
# errors = []
|
322
|
+
# sats.each_with_index do |sat, index|
|
323
|
+
# prefix = "cd #{sat}"
|
324
|
+
# cmds = [
|
325
|
+
# "git pull origin master",
|
326
|
+
# ["bundle update", gemName].join(' '),
|
327
|
+
# "git add Gemfile Gemfile.lock",
|
328
|
+
# "git commit -m 'bundle update #{gemName}'",
|
329
|
+
# "git push origin master"
|
330
|
+
# ]
|
331
|
+
# if system prefix
|
332
|
+
# log "#{index}/#{sats.size} work on #{sat}"
|
333
|
+
# cmds.each do |cmd|
|
334
|
+
# if system [prefix, cmd].join(' && ')
|
335
|
+
# log "#{cmd} >>> SUCCESS"
|
336
|
+
# else
|
337
|
+
# log "#{cmd} >>> FAILED"
|
338
|
+
# errors << [sat, cmd]
|
339
|
+
# log "!!!!!!!!!! FAILED #{sat}"
|
340
|
+
# break
|
341
|
+
# end
|
342
|
+
# end
|
343
|
+
# end
|
344
|
+
# end
|
345
|
+
# if errors.size > 0
|
346
|
+
# log "!!!! TOTAL ERRORS: #{errors.size}"
|
347
|
+
# errors.each_with_index do |err, index|
|
348
|
+
# log "FAILED: #{err[1]} on #{err[0]}"
|
349
|
+
# end
|
350
|
+
# end
|
351
|
+
# end
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
|
356
|
+
|
357
|
+
# def magick
|
358
|
+
# if @options[:dump].size > 0
|
359
|
+
# if env = env?(@options[:dump])
|
360
|
+
# param = load_prop env
|
361
|
+
# dump_db param, get_dumpname(param[:database], env)
|
362
|
+
# end
|
363
|
+
# elsif @options[:load].size > 0
|
364
|
+
# if env = env?(@options[:load])
|
365
|
+
# param = load_prop env
|
366
|
+
# load_db param, get_dumpname(param[:database], env)
|
367
|
+
# end
|
368
|
+
# elsif @options[:migrate].size > 0
|
369
|
+
# reset_migrate
|
370
|
+
# elsif @options[:fork].size > 0
|
371
|
+
# fork_db @options[:fork]
|
372
|
+
# elsif @options[:bundle].size > 0
|
373
|
+
# api = (@options[:api].size) > 0 ? @options[:api] : nil
|
374
|
+
# gemName = (@options[:gem].size > 0) ? @options[:gem] : nil
|
375
|
+
# sats = sattelites(api)
|
376
|
+
# bundleUpdate sats, gemName
|
377
|
+
# end
|
378
|
+
# end
|
379
|
+
|
380
|
+
# magick()
|
381
|
+
# # dump_db() if @options[:dump]
|
382
|
+
# # load_db() if @options[:load]
|
383
|
+
# # reset_migrate() if @options[:migrate]
|
384
|
+
# # fork_db() if @options[:fork]
|
385
|
+
|
386
|
+
# # app.add_import 'some/other/file.rake'
|
387
|
+
# # app.load_rakefile
|
388
|
+
|
389
|
+
# # log db_yml_sample_hash.inspect
|
390
|
+
# # log File.exist?(@db_yml_file)
|
391
|
+
# # log File.exist?(@db_sample_file)
|
392
|
+
|
393
|
+
# # system 'rake db:drop'
|
394
|
+
|
395
|
+
|
396
|
+
|
data/lib/dump.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative 'db_helper'
|
3
|
+
|
4
|
+
class DbDump < DbHelper
|
5
|
+
|
6
|
+
def self.run(args=[])
|
7
|
+
options = {
|
8
|
+
relative: false,
|
9
|
+
branch: :dev
|
10
|
+
}
|
11
|
+
opt_parser = OptionParser.new do |opts|
|
12
|
+
opts.banner = "Usage: .. dump [options]"
|
13
|
+
opts.separator ""
|
14
|
+
opts.separator "Specific options:"
|
15
|
+
|
16
|
+
opts.on("-f", "--file [database name]", "Set output file for database dump file.") do |arg|
|
17
|
+
options[:file] = arg
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.on("-b", "--branch [dev|test|stag|prod|all]", "Set branch for dumping, default: development.") do |arg|
|
21
|
+
arg = arg.downcase.to_sym
|
22
|
+
options[:branch] = arg if [:dev, :test, :prod, :stag, :all].include?(arg)
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on("-r", "--relative", "Set relative position of database dump file, if no option - used db store folder.") do |arg|
|
26
|
+
options[:relative] = true
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
30
|
+
puts opts
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
opt_parser.parse!(args)
|
36
|
+
get_configs()
|
37
|
+
dump!(options)
|
38
|
+
|
39
|
+
# pp options
|
40
|
+
end
|
41
|
+
end
|
42
|
+
# DbDump.run(ARGV)
|
data/lib/fork.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative 'db_helper'
|
3
|
+
|
4
|
+
class DbFork < DbHelper
|
5
|
+
|
6
|
+
def self.run(args=[])
|
7
|
+
options = {
|
8
|
+
relative: false,
|
9
|
+
branch: :dev
|
10
|
+
}
|
11
|
+
opt_parser = OptionParser.new do |opts|
|
12
|
+
opts.banner = "Usage: .. fork [options]"
|
13
|
+
opts.separator ""
|
14
|
+
opts.separator "Specific options:"
|
15
|
+
|
16
|
+
opts.on("-b", "--branch [dev|test|stag|prod|all]", "Set branch for fork, default: development.") do |arg|
|
17
|
+
arg = arg.downcase.to_sym
|
18
|
+
options[:branch] = arg if [:dev, :test, :prod, :stag, :all].include?(arg)
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on("-n [new name]", "--name [new name]", "Set new database name.") do |arg|
|
22
|
+
options[:name] = arg.split('.')[0]
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
26
|
+
puts opts
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
opt_parser.parse!(args)
|
32
|
+
get_configs()
|
33
|
+
fork!(options)
|
34
|
+
|
35
|
+
# pp options
|
36
|
+
end
|
37
|
+
end
|
38
|
+
# DbDump.run(ARGV)
|
data/lib/load.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative 'db_helper'
|
3
|
+
|
4
|
+
class DbLoad < DbHelper
|
5
|
+
|
6
|
+
def self.run(args=[])
|
7
|
+
options = {
|
8
|
+
relative: false,
|
9
|
+
clean: false,
|
10
|
+
reset: false,
|
11
|
+
branch: :dev
|
12
|
+
}
|
13
|
+
opt_parser = OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: .. load [options]"
|
15
|
+
opts.separator ""
|
16
|
+
opts.separator "Specific options:"
|
17
|
+
|
18
|
+
opts.on("-f", "--file [database name]", "Set output file for database dump file.") do |arg|
|
19
|
+
options[:file] = arg
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on("-b", "--branch [dev|test|stag|prod|all]", "Set branch for load, default: development.") do |arg|
|
23
|
+
arg = arg.downcase.to_sym
|
24
|
+
options[:branch] = arg if [:dev, :test, :prod, :stag, :all].include?(arg)
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-r", "--relative", "Set relative position of database dump file, if no option - used db store folder.") do |arg|
|
28
|
+
options[:relative] = true
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("-c", "--clean", "Clean db before load (drop>create>migrate>load)") do |arg|
|
32
|
+
options[:clean] = true
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
36
|
+
puts opts
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
opt_parser.parse!(args)
|
42
|
+
get_configs()
|
43
|
+
load!(options)
|
44
|
+
|
45
|
+
# pp options
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# DbLoad.run(ARGV)
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pg_db_helper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Izik AJ
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-19 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Easy dump and load PostgreSQL database.
|
14
|
+
email: izikaj@gmail.com
|
15
|
+
executables:
|
16
|
+
- izi_load
|
17
|
+
- izi_dump
|
18
|
+
- izi_fork
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- bin/izi_dump
|
23
|
+
- bin/izi_fork
|
24
|
+
- bin/izi_load
|
25
|
+
- config.yml.sample
|
26
|
+
- lib/config_worker.rb
|
27
|
+
- lib/db_helper.rb
|
28
|
+
- lib/dump.rb
|
29
|
+
- lib/fork.rb
|
30
|
+
- lib/load.rb
|
31
|
+
homepage: https://github.com/IzikAJ/pg_db_helper
|
32
|
+
licenses:
|
33
|
+
- MIT
|
34
|
+
metadata: {}
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirements: []
|
50
|
+
rubyforge_project:
|
51
|
+
rubygems_version: 2.4.3
|
52
|
+
signing_key:
|
53
|
+
specification_version: 4
|
54
|
+
summary: Just a simple Postgre database tool.
|
55
|
+
test_files: []
|