Merge pull request #36873 from jhawthorn/schema_sha_parallel
Sync parallel test DBs to schema using SHA
This commit is contained in:
commit
599c170d8e
@ -347,6 +347,24 @@ def schema_up_to_date?(configuration, format = ActiveRecord::Base.schema_format,
|
|||||||
ActiveRecord::InternalMetadata[:schema_sha1] == schema_sha1(file)
|
ActiveRecord::InternalMetadata[:schema_sha1] == schema_sha1(file)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reconstruct_from_schema(configuration, format = ActiveRecord::Base.schema_format, file = nil, environment = env, spec_name = "primary") # :nodoc:
|
||||||
|
file ||= dump_filename(spec_name, format)
|
||||||
|
|
||||||
|
check_schema_file(file)
|
||||||
|
|
||||||
|
ActiveRecord::Base.establish_connection(configuration)
|
||||||
|
|
||||||
|
if schema_up_to_date?(configuration, format, file, environment, spec_name)
|
||||||
|
truncate_tables(configuration)
|
||||||
|
else
|
||||||
|
purge(configuration)
|
||||||
|
load_schema(configuration, format, file, environment, spec_name)
|
||||||
|
end
|
||||||
|
rescue ActiveRecord::NoDatabaseError
|
||||||
|
create(configuration)
|
||||||
|
load_schema(configuration, format, file, environment, spec_name)
|
||||||
|
end
|
||||||
|
|
||||||
def dump_schema(configuration, format = ActiveRecord::Base.schema_format, spec_name = "primary") # :nodoc:
|
def dump_schema(configuration, format = ActiveRecord::Base.schema_format, spec_name = "primary") # :nodoc:
|
||||||
require "active_record/schema_dumper"
|
require "active_record/schema_dumper"
|
||||||
filename = dump_filename(spec_name, format)
|
filename = dump_filename(spec_name, format)
|
||||||
|
@ -8,31 +8,16 @@ module TestDatabases # :nodoc:
|
|||||||
create_and_load_schema(i, env_name: Rails.env)
|
create_and_load_schema(i, env_name: Rails.env)
|
||||||
end
|
end
|
||||||
|
|
||||||
ActiveSupport::Testing::Parallelization.run_cleanup_hook do
|
|
||||||
drop(env_name: Rails.env)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.create_and_load_schema(i, env_name:)
|
def self.create_and_load_schema(i, env_name:)
|
||||||
old, ENV["VERBOSE"] = ENV["VERBOSE"], "false"
|
old, ENV["VERBOSE"] = ENV["VERBOSE"], "false"
|
||||||
|
|
||||||
ActiveRecord::Base.configurations.configs_for(env_name: env_name).each do |db_config|
|
ActiveRecord::Base.configurations.configs_for(env_name: env_name).each do |db_config|
|
||||||
db_config.config["database"] += "-#{i}"
|
db_config.config["database"] += "-#{i}"
|
||||||
ActiveRecord::Tasks::DatabaseTasks.create(db_config.config)
|
ActiveRecord::Tasks::DatabaseTasks.reconstruct_from_schema(db_config.config, ActiveRecord::Base.schema_format, nil, env_name, db_config.spec_name)
|
||||||
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.config, ActiveRecord::Base.schema_format, nil, env_name, db_config.spec_name)
|
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
ActiveRecord::Base.establish_connection(Rails.env.to_sym)
|
ActiveRecord::Base.establish_connection(Rails.env.to_sym)
|
||||||
ENV["VERBOSE"] = old
|
ENV["VERBOSE"] = old
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.drop(env_name:)
|
|
||||||
old, ENV["VERBOSE"] = ENV["VERBOSE"], "false"
|
|
||||||
|
|
||||||
ActiveRecord::Base.configurations.configs_for(env_name: env_name).each do |db_config|
|
|
||||||
ActiveRecord::Tasks::DatabaseTasks.drop(db_config.config)
|
|
||||||
end
|
|
||||||
ensure
|
|
||||||
ENV["VERBOSE"] = old
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user