class CopyDbFromProd
Attributes
cf[RW]
conn[RW]
Public Class Methods
hi()
click to toggle source
# File lib/copy_db_from_prod.rb, line 8 def self.hi puts "Hello world!" end
new(args)
click to toggle source
# File lib/copy_db_from_prod.rb, line 18 def initialize(args) load_conf(args) end
Public Instance Methods
copy_env_table()
click to toggle source
# File lib/copy_db_from_prod.rb, line 84 def copy_env_table end
download_schema()
click to toggle source
# File lib/copy_db_from_prod.rb, line 22 def download_schema Net::SSH.start(cf[:host], cf[:user], key_data: cf[:keys], keys_only: TRUE) do |ssh| yml_text = ssh.exec!("cat #{cf[:deploy_to]}/config/database.yml") begin @prod_conf ||= YAML.load(yml_text)['production'] rescue => e raise "Can't access to database.yml, check -p params\n #{e}" end prod_data = ssh.exec!(dump_schema) if prod_data.include?('pg_dump') || prod_data.include?('warn') raise "error: pg_dump dosen't work correct\n #{prod_data}" else begin return Zlib::GzipReader.new(StringIO.new(prod_data)).read rescue => e raise "#{e}\n #{prod_data}" end end end end
drop_restore_table()
click to toggle source
# File lib/copy_db_from_prod.rb, line 52 def drop_restore_table conn.exec("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE '%_201%' ORDER BY table_name" ) do |result| conn.exec(result.map { |row| "DROP TABLE #{row['table_name']}" }.join(';')) end end
dump_schema()
click to toggle source
# File lib/copy_db_from_prod.rb, line 43 def dump_schema cmd = [] { password: 'export PGPASSWORD=#{val} &&', database: 'pg_dump #{val}', host: '-h #{val}', port: '-p #{val}', username: '-U #{val}' }.each_pair do |key, val| cmd.push(val.sub('#{val}', @prod_conf[key.to_s].to_s)) if @prod_conf.key?(key.to_s) end "#{cmd.join(' ')} --schema-only --no-owner --no-privileges -Z9" end
load_conf(args)
click to toggle source
# File lib/copy_db_from_prod.rb, line 12 def load_conf(args) @cf = { host: args.host, user: args.user, keys: [File.open("#{ENV['HOME']}/.ssh/id_rsa", 'r').read], deploy_to: args.path } end
load_schema()
click to toggle source
# File lib/copy_db_from_prod.rb, line 63 def load_schema @dev_conf = YAML.load(File.open('config/database.yml', 'r').read)['development'] @conn = PGconn.open(host: @dev_conf['host'], dbname: 'postgres', user: @dev_conf['username'], password: @dev_conf['password']) conn.exec("DROP DATABASE IF EXISTS #{@dev_conf['database']}") conn.exec("CREATE DATABASE #{@dev_conf['database']}") @conn = PGconn.open(host: @dev_conf['host'], dbname: @dev_conf['database'], user: @dev_conf['username'], password: @dev_conf['password']) schema = download_schema begin conn.exec(schema) rescue => e raise "Database #{@dev_conf['database']}\n#{e}\n #{schema}" end drop_restore_table if 'insales_dev' == @dev_conf['database'] end