Class: CopyDbFromProd

Inherits:
Object
  • Object
show all
Defined in:
lib/copy_db_from_prod.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ CopyDbFromProd

Returns a new instance of CopyDbFromProd.



18
19
20
# File 'lib/copy_db_from_prod.rb', line 18

def initialize(args)
  load_conf(args)
end

Instance Attribute Details

#cfObject

Returns the value of attribute cf.



6
7
8
# File 'lib/copy_db_from_prod.rb', line 6

def cf
  @cf
end

Class Method Details

.hiObject



8
9
10
# File 'lib/copy_db_from_prod.rb', line 8

def self.hi
  puts "Hello world!"
end

Instance Method Details

#download_schemaObject



22
23
24
25
26
27
28
29
30
31
32
# 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|
    @prod_conf = YAML.load(ssh.exec!("cat #{cf[:deploy_to]}/config/database.yml"))['production']
    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
      return Zlib::GzipReader.new(StringIO.new(ssh.exec!(prod_data))).read
    end
  end
end

#dump_schemaObject



34
35
36
37
38
39
40
41
# File 'lib/copy_db_from_prod.rb', line 34

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) ⇒ Object



12
13
14
15
16
# 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_schemaObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/copy_db_from_prod.rb', line 43

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'])
  conn.exec(download_schema)
end