pg_db_helper 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.
- 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: []
|