FIX: Ensure that our restorer is backwards compatible.

This commit is contained in:
Guo Xiang Tan 2016-08-01 11:56:06 +08:00
parent e79c216bc0
commit 441b98579a

View file

@ -106,10 +106,19 @@ module BackupRestore
@current_version = BackupRestore.current_version @current_version = BackupRestore.current_version
@timestamp = Time.now.strftime("%Y-%m-%d-%H%M%S") @timestamp = Time.now.strftime("%Y-%m-%d-%H%M%S")
@tmp_directory = File.join(Rails.root, "tmp", "restores", @current_db, @timestamp) @tmp_directory = File.join(Rails.root, "tmp", "restores", @current_db, @timestamp)
@source_filename = File.join(Backup.base_directory, @filename)
@archive_filename = File.join(@tmp_directory, @filename) @archive_filename = File.join(@tmp_directory, @filename)
@tar_filename = @archive_filename[0...-3] @tar_filename = @archive_filename[0...-3]
@meta_filename = File.join(@tmp_directory, BackupRestore::METADATA_FILE) @meta_filename = File.join(@tmp_directory, BackupRestore::METADATA_FILE)
@dump_filename = File.join(@tmp_directory, BackupRestore::DUMP_FILE)
# For backwards compatibility
@dump_filename =
if system("tar --list --file #{@source_filename} #{BackupRestore::DUMP_FILE}")
File.join(@tmp_directory, BackupRestore::DUMP_FILE)
else
File.join(@tmp_directory, "#{BackupRestore::DUMP_FILE}.gz")
end
@logs = [] @logs = []
@readonly_mode_was_enabled = Discourse.readonly_mode? @readonly_mode_was_enabled = Discourse.readonly_mode?
end end
@ -162,8 +171,7 @@ module BackupRestore
def copy_archive_to_tmp_directory def copy_archive_to_tmp_directory
log "Copying archive to tmp directory..." log "Copying archive to tmp directory..."
source = File.join(Backup.base_directory, @filename) execute_command("cp '#{@source_filename}' '#{@archive_filename}'", "Failed to copy archive to tmp directory.")
execute_command("cp '#{source}' '#{@archive_filename}'", "Failed to copy archive to tmp directory.")
end end
def unzip_archive def unzip_archive
@ -200,12 +208,20 @@ module BackupRestore
FileUtils.cd(@tmp_directory) do FileUtils.cd(@tmp_directory) do
execute_command( execute_command(
"tar --extract --file '#{@tar_filename}' #{BackupRestore::DUMP_FILE}.gz", "tar --extract --file '#{@tar_filename}' #{File.basename(@dump_filename)}",
"Failed to extract dump file." "Failed to extract dump file."
) )
end end
end end
def restore_dump_command
if File.extname(@dump_filename) == '.gz'
"gzip -d < #{@dump_filename} | #{sed_command} | #{psql_command} 2>&1"
else
"#{psql_command} 2>&1 < #{@dump_filename}"
end
end
def restore_dump def restore_dump
log "Restoring dump file... (can be quite long)" log "Restoring dump file... (can be quite long)"
@ -222,7 +238,7 @@ module BackupRestore
end end
end end
IO.popen("gzip -d < #{@dump_filename}.gz | #{sed_command} | #{psql_command} 2>&1") do |pipe| IO.popen(restore_dump_command) do |pipe|
begin begin
while line = pipe.readline while line = pipe.readline
logs << line logs << line