Created
December 9, 2016 17:10
-
-
Save wycleffsean/dc86575db92101d5afddadb3a55621b9 to your computer and use it in GitHub Desktop.
Heroku Accio DB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace :accio do | |
desc "Drop/restore database from Heroku backup" | |
task :db do | |
Rake::Task['accio:download_backup'].invoke | |
Rake::Task['accio:restore_backup'].invoke | |
end | |
desc "Download database dump from Heroku" | |
task :download_backup => [:logger_no_env, '~/.netrc'] do |t, args| | |
return Rails.logger.error('curl not installed') unless \ | |
command?('curl') | |
Rails.logger.info "Downloading Heroku database backup" | |
Bundler.with_clean_env do | |
url = `heroku pg:backups public-url --app itsallgravy`.chomp | |
`curl -o #{filename} '#{url}'` | |
end | |
end | |
desc "drops db and restores from backup" | |
task :restore_backup => [:logger] do |t, args| | |
return Rails.logger.error('pg_restore not installed') unless \ | |
command?('pg_restore') | |
return Rails.logger.error('no db backup found') unless \ | |
File.exists?(filename) | |
ActiveRecord::Base.connection | |
db_config = ActiveRecord::Base.connection_config | |
database = db_config[:database] | |
username = db_config[:username] | |
host = db_config[:host] | |
Rails.logger.info "Drop/creating database" | |
Rake::Task['db:drop'].invoke | |
Rake::Task['db:create'].invoke | |
Rails.logger.info "Restoring from database backup" | |
cmd = [] | |
cmd << 'pg_restore' | |
cmd << "-d #{database}" | |
cmd << "-U #{username}" | |
cmd << "-h #{host}" | |
cmd << "#{filename}" | |
system cmd.join(' ') | |
end | |
end | |
def command?(command) | |
system "which #{command} > /dev/null 2>&1" | |
end | |
def filename | |
"#{Rails.root}/tmp/db/backup.dump" | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Heroku authentication | |
file '~/.netrc' do | |
Rake::Task[:heroku_login].invoke | |
end | |
task :heroku_login do | |
require 'pty' | |
require 'expect' | |
require 'io/console' | |
Bundler.with_clean_env do | |
PTY.spawn('heroku login') do |reader, writer, pid| | |
print reader.expect(/: /).join | |
writer.write $stdin.gets | |
print reader.expect(/: /).join | |
writer.write $stdin.noecho(&:gets) | |
print reader.gets rescue Errno::EIO | |
Process.wait(pid) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment