1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Make 'migrate' clear the schema cache afterward

Without clearing the caches afterward, removals done in migrations would
not be reflected in a separate task in the same process. That is, given
a table with a migration to remove a column, the schema cache would
still reflect that a table has that in something such as the
'db:seed' task:

`rake db:migrate db:seed`
(A common thing to do in a script for a project ala `bin/setup`)

vs

`rake db:migrate && rake db:seed`
(Two processes)

The first would not reflect that the column was removed.
The second would (cache reset).
This commit is contained in:
Chris Arcand 2016-03-23 08:39:26 -04:00
parent 2e8a350c38
commit 16dadb1223
2 changed files with 14 additions and 2 deletions

View file

@ -159,6 +159,7 @@ module ActiveRecord
Migrator.migrate(migrations_paths, version) do |migration|
scope.blank? || scope == migration.scope
end
ActiveRecord::Base.clear_cache!
ensure
Migration.verbose = verbose_was
end

View file

@ -309,19 +309,30 @@ module ActiveRecord
end
class DatabaseTasksMigrateTest < ActiveRecord::TestCase
def setup
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = 'custom/path'
end
def teardown
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = nil
end
def test_migrate_receives_correct_env_vars
verbose, version = ENV['VERBOSE'], ENV['VERSION']
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = 'custom/path'
ENV['VERBOSE'] = 'false'
ENV['VERSION'] = '4'
ActiveRecord::Migrator.expects(:migrate).with('custom/path', 4)
ActiveRecord::Tasks::DatabaseTasks.migrate
ensure
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = nil
ENV['VERBOSE'], ENV['VERSION'] = verbose, version
end
def test_migrate_clears_schema_cache_afterward
ActiveRecord::Base.expects(:clear_cache!)
ActiveRecord::Tasks::DatabaseTasks.migrate
end
end
class DatabaseTasksPurgeTest < ActiveRecord::TestCase