FEATURE: Support backup uploads/downloads directly to/from S3.

This commit is contained in:
Gerhard Schlager
2018-09-10 16:48:34 +02:00
committed by Guo Xiang Tan
parent 5039a6c3f1
commit c29a4dddc1
52 changed files with 1079 additions and 420 deletions

View File

@ -62,18 +62,20 @@ class DiscourseCLI < Thor
require "backup_restore/backuper"
puts "Starting backup..."
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
backup = backuper.run
if filename.present?
puts "Moving '#{backup}' to '#{filename}'"
puts "Including version number into '#{filename}'"
version_string = File.basename(backup)[/-#{BackupRestore::VERSION_PREFIX}\d{14}/]
filename = filename.dup.insert(filename.index('.'), version_string)
FileUtils.mv(backup, filename)
backup = filename
end
backuper = BackupRestore::Backuper.new(Discourse.system_user.id, filename: filename)
backup_filename = backuper.run
puts "Backup done."
puts "Output file is in: #{backup}", ""
store = BackupRestore::BackupStore.create
if store.remote?
location = BackupLocationSiteSetting.values.find { |v| v[:value] == SiteSetting.backup_location }
location = I18n.t("admin_js.#{location[:name]}") if location
puts "Output file is stored on #{location} as #{backup_filename}", ""
else
backup = store.file(backup_filename, include_download_source: true)
puts "Output file is in: #{backup.source}", ""
end
exit(1) unless backuper.success
end
@ -92,20 +94,22 @@ class DiscourseCLI < Thor
discourse = './script/discourse'
end
load_rails
require "backup_restore/backup_restore"
require "backup_restore/restorer"
require "backup_restore/backup_store"
if !filename
puts "You must provide a filename to restore. Did you mean one of the following?\n\n"
Dir["public/backups/default/*"].sort_by { |path| File.mtime(path) }.reverse.each do |f|
puts "#{discourse} restore #{File.basename(f)}"
store = BackupRestore::BackupStore.create
store.files.each do |file|
puts "#{discourse} restore #{file.filename}"
end
return
end
load_rails
require "backup_restore/backup_restore"
require "backup_restore/restorer"
begin
puts "Starting restore: #{filename}"
restorer = BackupRestore::Restorer.new(Discourse.system_user.id, filename: filename)