mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Convert the db:abort_if_pending_migrations task to be multi-DB aware
This commit is contained in:
parent
0542e0608f
commit
cb8b57d07e
3 changed files with 55 additions and 1 deletions
|
@ -1,3 +1,7 @@
|
|||
* Add support for multiple databases to `rails db:abort_if_pending_migrations`.
|
||||
|
||||
*Mark Lee*
|
||||
|
||||
* Fix sqlite3 collation parsing when using decimal columns.
|
||||
|
||||
*Martin R. Schuster*
|
||||
|
|
|
@ -250,7 +250,11 @@ db_namespace = namespace :db do
|
|||
|
||||
# desc "Raises an error if there are pending migrations"
|
||||
task abort_if_pending_migrations: :load_config do
|
||||
pending_migrations = ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
||||
pending_migrations = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).flat_map do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
|
||||
ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
||||
end
|
||||
|
||||
if pending_migrations.any?
|
||||
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
||||
|
@ -261,6 +265,26 @@ db_namespace = namespace :db do
|
|||
end
|
||||
end
|
||||
|
||||
namespace :abort_if_pending_migrations do
|
||||
ActiveRecord::Tasks::DatabaseTasks.for_each do |spec_name|
|
||||
# desc "Raises an error if there are pending 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)
|
||||
|
||||
pending_migrations = ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
||||
|
||||
if pending_migrations.any?
|
||||
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
||||
pending_migrations.each do |pending_migration|
|
||||
puts " %4d %s" % [pending_migration.version, pending_migration.name]
|
||||
end
|
||||
abort %{Run `rails db:migrate:#{spec_name}` to update your database then try again.}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)"
|
||||
task setup: ["db:schema:load_if_ruby", "db:structure:load_if_sql", :seed]
|
||||
|
||||
|
|
|
@ -299,6 +299,32 @@ module ApplicationTests
|
|||
db_migrate_and_schema_cache_dump_and_schema_cache_clear
|
||||
end
|
||||
|
||||
test "db:abort_if_pending_migrations works on all databases" do
|
||||
require "#{app_path}/config/environment"
|
||||
|
||||
app_file "db/animals_migrate/02_two_migration.rb", <<-MIGRATION
|
||||
class TwoMigration < ActiveRecord::Migration::Current
|
||||
end
|
||||
MIGRATION
|
||||
|
||||
output = rails("db:abort_if_pending_migrations", allow_failure: true)
|
||||
assert_match(/You have 1 pending migration/, output)
|
||||
end
|
||||
|
||||
test "db:abort_if_pending_migrations:namespace works" do
|
||||
require "#{app_path}/config/environment"
|
||||
|
||||
app_file "db/animals_migrate/02_two_migration.rb", <<-MIGRATION
|
||||
class TwoMigration < ActiveRecord::Migration::Current
|
||||
end
|
||||
MIGRATION
|
||||
|
||||
output = rails("db:abort_if_pending_migrations:primary")
|
||||
assert_no_match(/You have \d+ pending migration/, output)
|
||||
output = rails("db:abort_if_pending_migrations:animals", allow_failure: true)
|
||||
assert_match(/You have 1 pending migration/, output)
|
||||
end
|
||||
|
||||
test "db:prepare works on all databases" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_prepare
|
||||
|
|
Loading…
Reference in a new issue