提交 ac18bda9 编写于 作者: G Gannon McGibbon

Add multi-db support to schema cache dump and clear

Adds support for multiple databases to `rails db:schema:cache:dump`
and `rails db:schema:cache:clear`.
上级 d84bc2b1
Adds support for multiple databases to `rails db:schema:cache:dump` and `rails db:schema:cache:clear`.
*Gannon McGibbon*
* `update_columns` now correctly raises `ActiveModel::MissingAttributeError`
if the attribute does not exist.
......
......@@ -300,15 +300,22 @@ db_namespace = namespace :db do
namespace :cache do
desc "Creates a db/schema_cache.yml file."
task dump: :load_config do
conn = ActiveRecord::Base.connection
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.yml")
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(conn, filename)
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
ActiveRecord::Base.establish_connection(db_config.config)
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(db_config.spec_name)
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(
ActiveRecord::Base.connection,
filename,
)
end
end
desc "Clears a db/schema_cache.yml file."
task clear: :load_config do
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.yml")
rm_f filename, verbose: false
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(db_config.spec_name)
rm_f filename, verbose: false
end
end
end
end
......
......@@ -313,6 +313,16 @@ def dump_filename(namespace, format = ActiveRecord::Base.schema_format)
ENV["SCHEMA"] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, filename)
end
def cache_dump_filename(namespace)
filename = if namespace == "primary"
"schema_cache.yml"
else
"#{namespace}_schema_cache.yml"
end
ENV["SCHEMA_CACHE"] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, filename)
end
def load_schema_current(format = ActiveRecord::Base.schema_format, file = nil, environment = env)
each_current_configuration(environment) { |configuration, spec_name, env|
load_schema(configuration, format, file, env, spec_name)
......
......@@ -65,6 +65,27 @@ def db_migrate_and_migrate_status
end
end
def db_migrate_and_schema_cache_dump
Dir.chdir(app_path) do
generate_models_for_animals
rails "db:migrate"
rails "db:schema:cache:dump"
assert File.exist?("db/schema_cache.yml")
assert File.exist?("db/animals_schema_cache.yml")
end
end
def db_migrate_and_schema_cache_dump_and_schema_cache_clear
Dir.chdir(app_path) do
generate_models_for_animals
rails "db:migrate"
rails "db:schema:cache:dump"
rails "db:schema:cache:clear"
assert_not File.exist?("db/schema_cache.yml")
assert_not File.exist?("db/animals_schema_cache.yml")
end
end
def db_migrate_and_schema_dump_and_load(format)
Dir.chdir(app_path) do
generate_models_for_animals
......@@ -194,6 +215,16 @@ def generate_models_for_animals
db_migrate_status_namespaced db_config.spec_name, db_config.config["database"]
end
end
test "db:schema:cache:dump works on all databases" do
require "#{app_path}/config/environment"
db_migrate_and_schema_cache_dump
end
test "db:schema:cache:clear works on all databases" do
require "#{app_path}/config/environment"
db_migrate_and_schema_cache_dump_and_schema_cache_clear
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册