Merge pull request #4359 from tgxworld/backward_compatibility_for_backups_and_restores
FIX: Ensure that our restorer is backwards compatible.
This commit is contained in:
commit
3f4f1ee032
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue