From ee1de40a3acacd77fd4be1776280ac963ff10d42 Mon Sep 17 00:00:00 2001 From: Caius Durling Date: Tue, 18 Apr 2023 17:11:33 +0100 Subject: [PATCH] Reset column information before running migrations Writing to a table in one migration, amending the columns in another migration then trying to write to the same table blows up when all the migrations are in the same run. Resetting the column information on all models between migrations doesn't add much time at all, but avoids that being an issue. --- lib/data_migrate/database_tasks.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/data_migrate/database_tasks.rb b/lib/data_migrate/database_tasks.rb index 94f6c15f..42e74b92 100644 --- a/lib/data_migrate/database_tasks.rb +++ b/lib/data_migrate/database_tasks.rb @@ -69,6 +69,8 @@ def data_migrations_path end def run_migration(migration, direction) + ActiveRecord::Base.descendants.each(&:reset_column_information) + if migration[:kind] == :data ::ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71]) ::DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version]) @@ -92,6 +94,8 @@ def self.forward(step = 1) DataMigrate::DataMigrator.assure_data_schema_table migrations = pending_migrations.reverse.pop(step).reverse migrations.each do | pending_migration | + ActiveRecord::Base.descendants.each(&:reset_column_information) + if pending_migration[:kind] == :data ActiveRecord::Migration.write("== %s %s" % ["Data", "=" * 71]) DataMigrate::DataMigrator.run(:up, data_migrations_path, pending_migration[:version])