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