Sha256: 465d376b96d5924875a9ba28c1ff6141d0d6fb39bc6afce2b61496d1fde7404e
Contents?: true
Size: 1.04 KB
Versions: 20
Compression:
Stored size: 1.04 KB
Contents
# frozen_string_literal: true require "sequel/timestamp_migrator_undo_extension" namespace :sequel do desc "Rollback migrations that are absent in revision when deploying on staging" task rollback_missing_migrations: :environment do extract_migrations = lambda do |path| Dir.glob("#{path}/db/migrate/*.rb").map { |filename| File.basename(filename).to_i } end old_migrations = extract_migrations.call(ENV.fetch("OLD_RELEASE")) new_migrations = extract_migrations.call(ENV.fetch("NEW_RELEASE")) migrations_to_rollback = old_migrations - new_migrations next if migrations_to_rollback.empty? puts "Rolling back migrations:" puts migrations_to_rollback path = Rails.root.join("db/migrate") migrator = Sequel::TimestampMigrator.new(DB, path, allow_missing_migration_files: true) applied_migrations = migrator.applied_migrations.map(&:to_i) migrations = applied_migrations.select { |m| m.in?(migrations_to_rollback) }.sort.reverse migrations.each { |migration| migrator.undo(migration) } end end
Version data entries
20 entries across 20 versions & 1 rubygems