mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 03:51:07 +08:00
FEATURE: Support backup uploads/downloads directly to/from S3.
This commit is contained in:

committed by
Guo Xiang Tan

parent
5039a6c3f1
commit
c29a4dddc1
@ -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)
|
||||
|
Reference in New Issue
Block a user