Class: Ec::Pg::Migrator
- Inherits:
-
Object
- Object
- Ec::Pg::Migrator
- Defined in:
- lib/ec/pg/migrator.rb
Overview
Runs ActiveRecord migrations in the context of a specific schema or shard.
Schema migrations
Sets search_path to the target schema before running migrations so that Rails creates (and tracks via schema_migrations) tables inside that schema.
Migrator.migrate_schema("tenant_abc")
Migrator.migrate_schema("tenant_abc", version: 20240101120000)
Migrator.rollback_schema("tenant_abc", steps: 2)
Migrator.migrate_each_schema(["tenant_a", "tenant_b"])
Shard migrations
Connects to the target shard before running migrations.
Migrator.migrate_shard(:shard_one)
Migrator.rollback_shard(:shard_one, steps: 1)
# Migrate all shards derived from configuration.number_of_shards
Migrator.migrate_each_shard
# Or supply an explicit list
Migrator.migrate_each_shard([:shard_one, :shard_two])
Class Method Summary collapse
- .migrate_all_schemas ⇒ Object
-
.migrate_each_schema(connection, schema_names, paths: nil, version: nil) ⇒ Object
Calls Migrator.migrate_schema for each name in
schema_names. -
.migrate_each_shard(shard_names = nil, paths: nil, version: nil) ⇒ Object
Calls Migrator.migrate_shard for each name in
shard_names. -
.migrate_schema(connection, schema_name, paths: nil, version: nil) ⇒ Object
Runs pending migrations with search_path set to
schema_name. -
.migrate_shard(shard_name, paths: nil, version: nil) ⇒ Object
Runs pending migrations connected to
shard_name. -
.rollback_schema(schema_name, steps: 1, paths: nil) ⇒ Object
Rolls back
stepsmigrations with search_path set toschema_name. -
.rollback_shard(shard_name, steps: 1, paths: nil) ⇒ Object
Rolls back
stepsmigrations connected toshard_name.
Class Method Details
.migrate_all_schemas ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ec/pg/migrator.rb', line 44 def migrate_all_schemas Ec::Pg::SchemaMixin.registered_models.each do |model| model.schemas.each do |shard, schemas| Ec::Pg.switch(shard: shard) do schemas.each do |schema| Ec::Pg.dprint("migrating model: #{model}, shard: #{shard}, schema: #{schema}") migrate_schema(model.connection, schema) end end end end end |
.migrate_each_schema(connection, schema_names, paths: nil, version: nil) ⇒ Object
Calls migrate_schema for each name in schema_names.
60 61 62 |
# File 'lib/ec/pg/migrator.rb', line 60 def migrate_each_schema(connection, schema_names, paths: nil, version: nil) schema_names.each { |name| migrate_schema(connection, name, paths: paths, version: version) } end |
.migrate_each_shard(shard_names = nil, paths: nil, version: nil) ⇒ Object
Calls migrate_shard for each name in shard_names. When shard_names is omitted, derives :shard_1 through :shard_N from configuration.number_of_shards.
90 91 92 93 94 |
# File 'lib/ec/pg/migrator.rb', line 90 def migrate_each_shard(shard_names = nil, paths: nil, version: nil) (shard_names || default_shards).each do |name| migrate_shard(name, paths: paths, version: version) end end |
.migrate_schema(connection, schema_name, paths: nil, version: nil) ⇒ Object
Runs pending migrations with search_path set to schema_name.
38 39 40 41 42 |
# File 'lib/ec/pg/migrator.rb', line 38 def migrate_schema(connection, schema_name, paths: nil, version: nil) Ec::Pg.dprint("Running migration for: #{schema_name}".red) connection.schema_search_path = schema_name run_migrations(connection, paths: paths, version: version) end |
.migrate_shard(shard_name, paths: nil, version: nil) ⇒ Object
Runs pending migrations connected to shard_name.
79 80 81 82 83 |
# File 'lib/ec/pg/migrator.rb', line 79 def migrate_shard(shard_name, paths: nil, version: nil) ShardManager.with_shard(shard_name) do run_migrations(paths: paths, version: version) end end |
.rollback_schema(schema_name, steps: 1, paths: nil) ⇒ Object
Rolls back steps migrations with search_path set to schema_name.
68 69 70 71 72 |
# File 'lib/ec/pg/migrator.rb', line 68 def rollback_schema(schema_name, steps: 1, paths: nil) SchemaManager.with_schema(schema_name) do build_context(paths).rollback(steps) end end |
.rollback_shard(shard_name, steps: 1, paths: nil) ⇒ Object
Rolls back steps migrations connected to shard_name.
100 101 102 103 104 |
# File 'lib/ec/pg/migrator.rb', line 100 def rollback_shard(shard_name, steps: 1, paths: nil) ShardManager.with_shard(shard_name) do build_context(paths).rollback(steps) end end |