diff --git a/Changelog.md b/Changelog.md index 0b8040c..5a184fe 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,8 @@ # Changelog +## 9.4.2 + - Fix db:prepare:with_data task + ## 9.4.1 - Add db:prepare task diff --git a/Gemfile.lock b/Gemfile.lock index 7fb98b8..bbbdbca 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - data_migrate (9.4.1) + data_migrate (9.4.2) activerecord (>= 6.1) railties (>= 6.1) diff --git a/gemfiles/rails_6.1.gemfile.lock b/gemfiles/rails_6.1.gemfile.lock index 7c82ed1..54d78e8 100644 --- a/gemfiles/rails_6.1.gemfile.lock +++ b/gemfiles/rails_6.1.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - data_migrate (9.4.1) + data_migrate (9.4.2) activerecord (>= 6.1) railties (>= 6.1) diff --git a/gemfiles/rails_7.0.gemfile.lock b/gemfiles/rails_7.0.gemfile.lock index 8a52a68..9d99b69 100644 --- a/gemfiles/rails_7.0.gemfile.lock +++ b/gemfiles/rails_7.0.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - data_migrate (9.4.1) + data_migrate (9.4.2) activerecord (>= 6.1) railties (>= 6.1) diff --git a/gemfiles/rails_7.1.gemfile.lock b/gemfiles/rails_7.1.gemfile.lock index 511411b..b1066e6 100644 --- a/gemfiles/rails_7.1.gemfile.lock +++ b/gemfiles/rails_7.1.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - data_migrate (9.4.1) + data_migrate (9.4.2) activerecord (>= 6.1) railties (>= 6.1) diff --git a/lib/data_migrate/database_tasks.rb b/lib/data_migrate/database_tasks.rb index dee2c47..3f5a914 100644 --- a/lib/data_migrate/database_tasks.rb +++ b/lib/data_migrate/database_tasks.rb @@ -204,5 +204,42 @@ def self.migrate_with_data end end end + + def self.prepare_all_with_data + seed = false + + each_current_configuration(env) do |db_config| + next unless db_config.primary? + + with_temporary_pool(db_config) do + begin + database_initialized = migration_connection.schema_migration.table_exists? + rescue ActiveRecord::NoDatabaseError + create(db_config) + retry + end + + unless database_initialized + if File.exist?(schema_dump_path(db_config)) + load_schema(db_config, ActiveRecord.schema_format, nil) + load_schema_current( + :ruby, + ENV["DATA_SCHEMA"] + ) + end + + seed = true + end + + migrate_with_data + if ActiveRecord.dump_schema_after_migration + dump_schema(db_config) + DataMigrate::Tasks::DataMigrateTasks.dump + end + end + end + + load_seed if seed + end end end diff --git a/lib/data_migrate/version.rb b/lib/data_migrate/version.rb index 5a4d687..ffc2c43 100644 --- a/lib/data_migrate/version.rb +++ b/lib/data_migrate/version.rb @@ -1,3 +1,3 @@ module DataMigrate - VERSION = "9.4.1".freeze + VERSION = "9.4.2".freeze end diff --git a/tasks/databases.rake b/tasks/databases.rake index 9608a4e..7c92515 100644 --- a/tasks/databases.rake +++ b/tasks/databases.rake @@ -146,6 +146,13 @@ namespace :db do end end end + + namespace :prepare do + desc "Runs setup if database does not exist, or runs data and schema migrations if it does" + task with_data: :environment do + DataMigrate::DatabaseTasks.prepare_all_with_data + end + end end namespace :data do