Skip to content

Commit

Permalink
Move migrate code into DataMigrate::DatabaseTasks
Browse files Browse the repository at this point in the history
so that we can call it from other tasks directly without invoking rake
  • Loading branch information
Floppy committed Jun 20, 2024
1 parent 614ab83 commit 9f7a3c8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 28 deletions.
31 changes: 31 additions & 0 deletions lib/data_migrate/database_tasks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -173,5 +173,36 @@ def past_migrations(sort = nil)

sort&.downcase == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse
end

def self.migrate_with_data
DataMigrate::DataMigrator.create_data_schema_table

ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true

db_configs = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env)

schema_mapped_versions = ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions(db_configs)
data_mapped_versions = DataMigrate::DatabaseTasks.db_configs_with_versions

mapped_versions = schema_mapped_versions.merge(data_mapped_versions) do |_key, schema_db_configs, data_db_configs|
schema_db_configs + data_db_configs
end

mapped_versions.sort.each do |version, db_configs|
db_configs.each do |db_config|
if is_data_migration = db_config.is_a?(DataMigrate::DatabaseConfigurationWrapper)
db_config = db_config.db_config
end

DataMigrate::DatabaseTasks.with_temporary_connection(db_config) do
if is_data_migration
DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
else
ActiveRecord::Tasks::DatabaseTasks.migrate(version)
end
end
end
end
end
end
end
29 changes: 1 addition & 28 deletions tasks/databases.rake
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,7 @@ namespace :db do
namespace :migrate do
desc "Migrate the database data and schema (options: VERSION=x, VERBOSE=false)."
task :with_data => :load_config do
DataMigrate::DataMigrator.create_data_schema_table
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true

db_configs = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env)

schema_mapped_versions = ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions(db_configs)
data_mapped_versions = DataMigrate::DatabaseTasks.db_configs_with_versions

mapped_versions = schema_mapped_versions.merge(data_mapped_versions) do |_key, schema_db_configs, data_db_configs|
schema_db_configs + data_db_configs
end

mapped_versions.sort.each do |version, db_configs|
db_configs.each do |db_config|
if is_data_migration = db_config.is_a?(DataMigrate::DatabaseConfigurationWrapper)
db_config = db_config.db_config
end

DataMigrate::DatabaseTasks.with_temporary_connection(db_config) do
if is_data_migration
DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
else
ActiveRecord::Tasks::DatabaseTasks.migrate(version)
end
end
end
end

DataMigrate::DatabaseTasks.migrate_with_data
Rake::Task["db:_dump"].invoke
Rake::Task["data:dump"].invoke
end
Expand Down

0 comments on commit 9f7a3c8

Please sign in to comment.