Skip to content
  • eileencodes's avatar
    7cc27d74
    Move SchemaMigration to migration_context · 7cc27d74
    eileencodes authored
    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]
    7cc27d74
    Move SchemaMigration to migration_context
    eileencodes authored
    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]
Loading