namespace :db_refresher do
desc 'Refresh current db state to all migrations (from cache if available)' task refresh: :environment do conn = nil safe_schema_head_sql = nil use_safe = false begin conn = ActiveRecord::Base.connection safe_schema_head_sql = "drop schema public cascade; create schema public;" use_safe = true sql = ActiveRecord::Base.send(:sanitize_sql_array, safe_schema_head_sql) conn.execute(sql) rescue ActiveRecord::NoDatabaseError, PG::ConnectionBad => e puts "Woops: #{e.message}" safe_schema_head_sql = File.read(File.join(File.dirname(__FILE__), '..', 'sql', 'postgres_head.sql')) config = Rails.configuration.database_configuration[Rails.env] variables = { db_name: config['database'], user_name: config['username'], } variables.each_pair do |key, value| safe_schema_head_sql = safe_schema_head_sql.gsub("s{#{key}}", value) end file_name = "/tmp/refresh_db-#{Time.now.to_i}.sql" File.write(file_name, safe_schema_head_sql) system("sudo -u postgres psql < #{file_name}") end end desc 'Refresh current cache' task refresh_cache: :environment do puts "Refresh with cache!" end
end
desc 'Run default refresh task' task :db_refresher => ['db_refresher:refresh']