diff options
author | eileencodes <eileencodes@gmail.com> | 2019-05-30 08:25:05 -0400 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2019-06-14 11:15:08 -0400 |
commit | 7cc27d749c3563e6b278ad01d233cb92ea3b7935 (patch) | |
tree | 5975a2c14a3b0f9d2dfc234a2a5b27f3e50354e0 /activerecord/lib/active_record/connection_adapters/abstract_adapter.rb | |
parent | c0af72bf86701e03ac97a50754beddf2b5d7943f (diff) | |
download | rails-7cc27d749c3563e6b278ad01d233cb92ea3b7935.tar.gz rails-7cc27d749c3563e6b278ad01d233cb92ea3b7935.tar.bz2 rails-7cc27d749c3563e6b278ad01d233cb92ea3b7935.zip |
Move SchemaMigration to migration_context
This PR moves the `schema_migration` to `migration_context` so that we
can access the `schema_migration` per connection.
This does not change behavior of the SchemaMigration if you are using
one database. This also does not change behavior of any public APIs.
`Migrator` is private as is `MigrationContext` so we can change these as
needed.
We now need to pass a `schema_migration` to `Migrator` so that we can
run migrations on the right connection outside the context of a rake
task.
The bugs this fixes were discovered while debugging the issues around
the SchemaCache on initialization with multiple database. It was clear
that `get_all_versions` wouldn't work without these changes outside the
context of a rake task (because in the rake task we establish a
connection and change AR::Base.connection to the db we're running on).
Because the `SchemaCache` relies on the `SchemaMigration` information we
need to make sure we store it per-connection rather than on
ActiveRecord::Base.
[Eileen M. Uchitelle & Aaron Patterson]
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract_adapter.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract_adapter.rb | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index cfd986ebf9..7d3ec7ecfd 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -163,7 +163,22 @@ module ActiveRecord end def migration_context # :nodoc: - MigrationContext.new(migrations_paths) + MigrationContext.new(migrations_paths, schema_migration) + end + + def schema_migration # :nodoc: + @schema_migration ||= begin + conn = self + spec_name = conn.pool.spec.name + name = "#{spec_name}::SchemaMigration" + + Class.new(ActiveRecord::SchemaMigration) do + define_singleton_method(:name) { name } + define_singleton_method(:to_s) { name } + + self.connection_specification_name = spec_name + end + end end class Version |