require 'active_record/connection_adapters/postgresql_adapter' module ActiveRecord
module ConnectionAdapters class PostgreSQLAdapter < AbstractAdapter def drop_database(name) raise "Nah, I won't drop the production database" if Rails.env.production? execute <<-SQL UPDATE pg_catalog.pg_database SET datallowconn=false WHERE datname='#{name}' SQL execute <<-SQL SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{name}'; SQL execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}" end end end
end
namespace :db do
desc "Import the last production backup into local db" task import_last_backup: :environment do Rake::Task['db:drop'].invoke Rake::Task['db:create'].invoke system "pg_restore -O -x -d #{Rails.configuration.database_configuration[Rails.env]['database']} tmp/latest.dump" Rake::Task['db:migrate'].invoke end desc "Clone the production db into local db" task clone_prod: :environment do system 'heroku pg:backups capture --remote heroku' system 'curl -o tmp/latest.dump `heroku pg:backups --remote heroku public-url`' Rake::Task['db:import_last_backup'].invoke end
end