class Database::Local

Public Class Methods

new(cap_instance) click to toggle source
Calls superclass method Database::Base::new
# File lib/capistrano-db-tasks/database.rb, line 156
def initialize(cap_instance)
  super(cap_instance)
  puts "Loading local database config"
  command = "#{Dir.pwd}/bin/rails runner \"puts '#{DBCONFIG_BEGIN_FLAG}' + ActiveRecord::Base.connection.instance_variable_get(:@config).to_yaml + '#{DBCONFIG_END_FLAG}'\""
  stdout, status = Open3.capture2(command)
  raise "Error running command (status=#{status}): #{command}" if status != 0

  config_content = stdout.match(/#{DBCONFIG_BEGIN_FLAG}(.*?)#{DBCONFIG_END_FLAG}/m)[1]
  @config = YAML.load(config_content).each_with_object({}) { |(k, v), h| h[k.to_s] = v }
end

Public Instance Methods

dump() click to toggle source
# File lib/capistrano-db-tasks/database.rb, line 181
def dump
  execute "#{dump_cmd} | #{compressor.compress('-', output_file)}"
  self
end
load(file, cleanup) click to toggle source

cleanup = true removes the mysqldump file after loading, false leaves it in db/

# File lib/capistrano-db-tasks/database.rb, line 168
def load(file, cleanup)
  unzip_file = File.join(File.dirname(file), File.basename(file, ".#{compressor.file_extension}"))
  puts "executing local: #{compressor.decompress(file)} && #{import_cmd(unzip_file)}"
  execute("#{compressor.decompress(file)} && #{import_cmd(unzip_file)}")
  if cleanup
    puts "removing #{unzip_file}"
    File.unlink(unzip_file)
  else
    puts "leaving #{unzip_file} (specify :db_local_clean in deploy.rb to remove)"
  end
  puts "Completed database import"
end
upload() click to toggle source
# File lib/capistrano-db-tasks/database.rb, line 186
def upload
  remote_file = "#{@cap.current_path}/#{output_file}"
  @cap.upload! output_file, remote_file
end

Private Instance Methods

execute(cmd) click to toggle source
# File lib/capistrano-db-tasks/database.rb, line 193
def execute(cmd)
  result = system cmd
  @cap.error "Failed to execute the local command: #{cmd}" unless result
  result
end