mirror of https://github.com/rails/rails
Don't use schema cache when checking schema migrations
I noticed this while debugging a separate issue locally. When `lazily_load_schema_cache` is set to true AND there's a schema cache, running `db:drop` twice will raise a `no such table: schema_migrations` error. The problem here was that when `check_protected_environments` is run before drop, the task checks for the latest environment. That check looks at `table_exists?` defined in `model_schema.rb`. The issue is that the model schema is checking `connection.schema_cache.data_source_exists?`. When checking whether the environment is protected or schema migrations we don't want to use the schema cache. We want to check the database directly. The schema cache really is for the app after boot, so it's safe to skip the schema cache in this area since we want to check the database directly.
This commit is contained in:
parent
139183cbce
commit
920a58a3d6
|
@ -41,6 +41,10 @@ module ActiveRecord
|
|||
def all_versions
|
||||
order(:version).pluck(:version)
|
||||
end
|
||||
|
||||
def table_exists?
|
||||
connection.data_source_exists?(table_name)
|
||||
end
|
||||
end
|
||||
|
||||
def version
|
||||
|
|
|
@ -701,6 +701,28 @@ module ApplicationTests
|
|||
assert_equal("Not touched", File.read("db/schema.rb").strip)
|
||||
end
|
||||
end
|
||||
|
||||
test "lazily loaded schema cache isn't read when reading the schema migrations table" do
|
||||
Dir.chdir(app_path) do
|
||||
app_file "config/initializers/lazy_load_schema_cache.rb", <<-RUBY
|
||||
Rails.application.config.active_record.lazily_load_schema_cache = true
|
||||
RUBY
|
||||
|
||||
rails "generate", "model", "recipe", "title:string"
|
||||
rails "db:migrate"
|
||||
rails "db:schema:cache:dump"
|
||||
|
||||
file = File.read("db/schema_cache.yml")
|
||||
assert_match(/schema_migrations: true/, file)
|
||||
assert_match(/recipes: true/, file)
|
||||
|
||||
output = rails "db:drop"
|
||||
assert_match(/Dropped database/, output)
|
||||
|
||||
repeat_output = rails "db:drop"
|
||||
assert_match(/Dropped database/, repeat_output)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue