class ScalingoBackupsManager::Restore::Mongodb
Public Class Methods
restore(filename, options = {})
click to toggle source
# File lib/scalingo_backups_manager/restore/mongodb.rb, line 7 def self.restore(filename, options = {}) opts = options.reverse_merge({ database_config_file: 'mongoid.yml', env: 'development', host: nil, remote_database_name: nil, local_database_name: nil, skip_rm: false }) destination_path = filename.split("/") backup_name = destination_path.pop.gsub(".tar.gz", "") destination_path = destination_path.join("/") + backup_name + "/" p destination_path if Dir.exist?(destination_path) puts "Unzipped backup is already present, skipping..." else Dir.mkdir(destination_path) unless Dir.exist?(destination_path) untar_cmd = "tar zxvf #{filename} -C #{destination_path}" system untar_cmd end rails_db_config = YAML.load(ERB.new(File.read("config/#{opts[:database_config_file]}")).result)[opts[:env]]["clients"]["default"] config = { host: rails_db_config["hosts"].first, database: rails_db_config["database"], password: rails_db_config["options"]["password"], user: rails_db_config["options"]["user"], auth_source: rails_db_config["options"]["auth_source"] } restore_cmd = "/usr/bin/env mongorestore --drop -h #{opts[:host] || config[:host]}" if opts[:local_database_name].present? restore_cmd << " --db #{opts[:local_database_name]}" end if opts[:remote_database_name].present? restore_cmd << " --dir \"#{destination_path}/#{opts[:remote_database_name]}\"" else restore_cmd << " --dir \"#{destination_path}/\"" end if config[:auth_source].present? restore_cmd << " --authenticationDatabase #{config[:auth_source]}" end if config[:user].present? restore_cmd << " -u #{config[:user]}" if config[:password].present? restore_cmd << " --password" restore_cmd << " #{config[:password]}" end end puts "*** Restoring backup to Mongodb database ***" system(restore_cmd) FileUtils.rm_r destination_path unless opts[:skip_rm] end