Skip to content

Instantly share code, notes, and snippets.

@kawahiro311
Created September 30, 2014 09:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kawahiro311/7113547dc609800cd24a to your computer and use it in GitHub Desktop.
Save kawahiro311/7113547dc609800cd24a to your computer and use it in GitHub Desktop.
S3へのDBバックアップRakeタスク(PostgreSQL)
namespace :db do
desc 'S3へのDBバックアップ'
task backup: :environment do
# loggerの設定
logger = Logger.new('log/cron.log', 5, 10.megabytes)
logger.info('start db:backup')
t = Time.current
backup_file = "tmp/backups/#{t.strftime('%Y-%m-%d')}_dbname.dump"
`mkdir -p tmp/backups`
`pg_dump -U postgres -Fc dbname_#{Rails.env} > #{backup_file}`
send_to_s3(backup_file)
# localファイルの削除
File.delete(backup_file)
logger.info('end db:backup')
end
# s3へのバックアップ
def send_to_s3(file_path)
s3 = AWS::S3.new
bucket = s3.buckets['xxxxx']
file_name = File.basename(file_path)
bucket.objects["backups/#{file_name}"].write(file: file_path)
delete_olds(bucket)
end
# 7日前のものは削除
def delete_olds(bucket)
bucket.objects.each do |obj|
date_str = obj.key.match(/[0-9]{4}-[0-9]{2}-[0-9]{2}/)[0]
if (Date.today.days_ago(7) > date_str.to_date)
obj.delete
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment