未验证 提交 9413ef56 编写于 作者: E Eileen M. Uchitelle 提交者: GitHub

Merge pull request #34137 from gmcgibbon/db_migrate_status_multi_db

Add multi-db support to rails db:migrate:status
......@@ -149,7 +149,21 @@ db_namespace = namespace :db do
desc "Display status of migrations"
task status: :load_config do
ActiveRecord::Tasks::DatabaseTasks.migrate_status
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
ActiveRecord::Base.establish_connection(db_config.config)
ActiveRecord::Tasks::DatabaseTasks.migrate_status
end
end
namespace :status do
ActiveRecord::Tasks::DatabaseTasks.for_each do |spec_name|
desc "Display status of migrations for #{spec_name} database"
task spec_name => :load_config do
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
ActiveRecord::Base.establish_connection(db_config.config)
ActiveRecord::Tasks::DatabaseTasks.migrate_status
end
end
end
end
......
* Adds support for multiple databases to `rails db:migrate:status`.
Subtasks are also added to get the status of individual databases (eg. `rails db:migrate:status:animals`).
*Gannon McGibbon*
* Use Webpacker by default to manage app-level JavaScript through the new app/javascript directory.
Sprockets is now solely in charge, by default, of compiling CSS and other static assets.
Action Cable channel generators will create ES6 stubs rather than use CoffeeScript.
......
......@@ -55,11 +55,19 @@ def assert_match_namespace(namespace, output)
end
end
def db_migrate_and_schema_dump_and_load(namespace, expected_database, format)
def db_migrate_and_migrate_status
Dir.chdir(app_path) do
rails "generate", "model", "book", "title:string"
rails "generate", "model", "dog", "name:string"
write_models_for_animals
generate_models_for_animals
rails "db:migrate"
output = rails "db:migrate:status"
assert_match(/up \d+ Create books/, output)
assert_match(/up \d+ Create dogs/, output)
end
end
def db_migrate_and_schema_dump_and_load(format)
Dir.chdir(app_path) do
generate_models_for_animals
rails "db:migrate", "db:#{format}:dump"
if format == "schema"
......@@ -86,9 +94,7 @@ def db_migrate_and_schema_dump_and_load(namespace, expected_database, format)
def db_migrate_namespaced(namespace, expected_database)
Dir.chdir(app_path) do
rails "generate", "model", "book", "title:string"
rails "generate", "model", "dog", "name:string"
write_models_for_animals
generate_models_for_animals
output = rails("db:migrate:#{namespace}")
if namespace == "primary"
assert_match(/CreateBooks: migrated/, output)
......@@ -98,6 +104,18 @@ def db_migrate_namespaced(namespace, expected_database)
end
end
def db_migrate_status_namespaced(namespace, expected_database)
Dir.chdir(app_path) do
generate_models_for_animals
output = rails("db:migrate:status:#{namespace}")
if namespace == "primary"
assert_match(/up \d+ Create books/, output)
else
assert_match(/up \d+ Create dogs/, output)
end
end
end
def write_models_for_animals
# make a directory for the animals migration
FileUtils.mkdir_p("#{app_path}/db/animals_migrate")
......@@ -117,17 +135,22 @@ def write_models_for_animals
# create the base model for dog to inherit from
File.open("#{app_path}/app/models/animals_base.rb", "w") do |file|
file.write(<<-EOS
class AnimalsBase < ActiveRecord::Base
self.abstract_class = true
file.write(<<~EOS)
class AnimalsBase < ActiveRecord::Base
self.abstract_class = true
establish_connection :animals
end
EOS
)
establish_connection :animals
end
EOS
end
end
def generate_models_for_animals
rails "generate", "model", "book", "title:string"
rails "generate", "model", "dog", "name:string"
write_models_for_animals
end
test "db:create and db:drop works on all databases for env" do
require "#{app_path}/config/environment"
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
......@@ -144,22 +167,31 @@ class AnimalsBase < ActiveRecord::Base
test "db:migrate and db:schema:dump and db:schema:load works on all databases" do
require "#{app_path}/config/environment"
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
db_migrate_and_schema_dump_and_load db_config.spec_name, db_config.config["database"], "schema"
end
db_migrate_and_schema_dump_and_load "schema"
end
test "db:migrate and db:structure:dump and db:structure:load works on all databases" do
require "#{app_path}/config/environment"
db_migrate_and_schema_dump_and_load "structure"
end
test "db:migrate:namespace works" do
require "#{app_path}/config/environment"
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
db_migrate_and_schema_dump_and_load db_config.spec_name, db_config.config["database"], "structure"
db_migrate_namespaced db_config.spec_name, db_config.config["database"]
end
end
test "db:migrate:namespace works" do
test "db:migrate:status works on all databases" do
require "#{app_path}/config/environment"
db_migrate_and_migrate_status
end
test "db:migrate:status:namespace works" do
require "#{app_path}/config/environment"
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
db_migrate_namespaced db_config.spec_name, db_config.config["database"]
db_migrate_status_namespaced db_config.spec_name, db_config.config["database"]
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册