module Cloner::Ar

Public Instance Methods

ar_conf() click to toggle source
# File lib/cloner/ar.rb, line 7
def ar_conf
  if multi_db?
    read_ar_conf[@current_database]
  else
    read_ar_conf
  end
end
ar_r_conf() click to toggle source
# File lib/cloner/ar.rb, line 59
def ar_r_conf
  if multi_db?
    read_ar_r_conf[@current_database]
  else
    read_ar_r_conf
  end
end
ar_to() click to toggle source
# File lib/cloner/ar.rb, line 28
def ar_to
  ar_conf['database']
end
clone_ar() click to toggle source
# File lib/cloner/ar.rb, line 86
def clone_ar
  if multi_db?
    dblist = clone_databases
    if dblist.nil?
      dblist = read_ar_conf.keys
    end
    puts "cloning multiple databases: #{dblist.join(", ")}"
    dblist.each do |dbn|
      @current_database = dbn
      run_clone_ar
    end
    @current_database = nil
  else
    run_clone_ar
  end
end
clone_databases() click to toggle source
# File lib/cloner/ar.rb, line 19
def clone_databases
  # clone all databases by default
  nil
end
db_file_name() click to toggle source
# File lib/cloner/ar.rb, line 51
def db_file_name
  if multi_db?
    "cloner_" + @current_database
  else
    "cloner"
  end
end
env_database() click to toggle source
# File lib/cloner/ar.rb, line 24
def env_database
  Rails.env
end
multi_db?() click to toggle source
# File lib/cloner/ar.rb, line 15
def multi_db?
  false
end
read_ar_conf() click to toggle source
# File lib/cloner/ar.rb, line 2
def read_ar_conf
  @conf ||= begin
    YAML.load(ERB.new(File.read(Rails.root.join('config', 'database.yml'))).result)[env_database]
  end
end
read_ar_r_conf() click to toggle source
# File lib/cloner/ar.rb, line 32
def read_ar_r_conf
  @ar_r_conf ||= begin
    do_ssh do |ssh|
      ret = ssh_exec!(ssh, "cat #{e(remote_app_path + '/config/database.yml')}")
      check_ssh_err(ret)
      begin
        res = YAML.load(ERB.new(ret[0]).result)[env_from]
        raise 'no data' if res.blank?
        #res['host'] ||= '127.0.0.1'
      rescue Exception => e
        puts "unable to read remote database.yml for env #{env_from}."
        puts "Remote file contents:"
        puts ret[0]
      end
      res
    end
  end
end
run_clone_ar() click to toggle source
# File lib/cloner/ar.rb, line 67
def run_clone_ar
  if ar_conf["adapter"] != ar_r_conf["adapter"]
    puts "Error: ActiveRecord adapter mismatch: local #{ar_conf["adapter"]}, remote #{ar_r_conf["adapter"]}"
    puts "it is not possible to convert from one database to another via this tool."
    exit
  end

  case ar_conf["adapter"]
  when 'postgresql'
    clone_pg
  when 'mysql2'
    clone_my
  else
    puts "unknown activerecord adapter: #{ar_conf["adapter"]}"
    puts "currently supported adapters: mysql2, postgresql"
    exit
  end
end