Class: Database::Local

Inherits:
Base
  • Object
show all
Defined in:
lib/capistrano-db-tasks/database.rb

Constant Summary

Constants inherited from Base

Base::DBCONFIG_BEGIN_FLAG, Base::DBCONFIG_END_FLAG

Instance Attribute Summary

Attributes inherited from Base

#config, #output_file

Instance Method Summary collapse

Methods inherited from Base

#compressor, #credentials, #current_time, #database, #mysql?, #postgresql?

Constructor Details

#initialize(cap_instance) ⇒ Local

Returns a new instance of Local.



152
153
154
155
156
157
158
159
160
161
# File 'lib/capistrano-db-tasks/database.rb', line 152

def initialize(cap_instance)
  super(cap_instance)
  @cap.info "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

Instance Method Details

#dumpObject



177
178
179
180
# File 'lib/capistrano-db-tasks/database.rb', line 177

def dump
  execute "#{dump_cmd} | #{compressor.compress('-', output_file)}"
  self
end

#load(file, cleanup) ⇒ Object

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



164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/capistrano-db-tasks/database.rb', line 164

def load(file, cleanup)
  unzip_file = File.join(File.dirname(file), File.basename(file, ".#{compressor.file_extension}"))
  @cap.info "executing local: #{compressor.decompress(file)} && #{import_cmd(unzip_file)}"
  execute("#{compressor.decompress(file)} && #{import_cmd(unzip_file)}")
  if cleanup
    @cap.info "removing #{unzip_file}"
    File.unlink(unzip_file)
  else
    @cap.info "leaving #{unzip_file} (specify :db_local_clean in deploy.rb to remove)"
  end
  @cap.info "Completed database import"
end

#uploadObject



182
183
184
185
# File 'lib/capistrano-db-tasks/database.rb', line 182

def upload
  remote_file = "#{@cap.current_path}/#{output_file}"
  @cap.upload! output_file, remote_file
end