Skip to content

Commit d1baada

Browse files
authored
Merge pull request rails#55077 from JoeDupuis/db-migrate-reset-namespaced
Add namespaced version of the `db:migrate:reset` command.
2 parents c25c1c1 + 9cb9b4c commit d1baada

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

activerecord/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Add support for multiple databases to `db:migrate:reset`.
2+
3+
*Joé Dupuis*
4+
15
* Add `affected_rows` to `ActiveRecord::Result`.
26

37
*Jenny Shen*

activerecord/lib/active_record/railties/databases.rake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,18 @@ db_namespace = namespace :db do
163163
desc "Resets your database using your migrations for the current environment"
164164
task reset: ["db:drop", "db:create", "db:schema:dump", "db:migrate"]
165165

166+
namespace :reset do
167+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
168+
desc "Drop and recreate the #{name} database using migrations"
169+
task name => :load_config do
170+
db_namespace["drop:#{name}"].invoke
171+
db_namespace["create:#{name}"].invoke
172+
db_namespace["schema:dump:#{name}"].invoke
173+
db_namespace["migrate:#{name}"].invoke
174+
end
175+
end
176+
end
177+
166178
desc 'Run the "up" for a given migration VERSION.'
167179
task up: :load_config do
168180
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:up")

railties/test/application/rake/multi_dbs_test.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,38 @@ class TwoMigration < ActiveRecord::Migration::Current
993993
end
994994
end
995995

996+
test "db:migrate:reset:primary regenerates the schema from migrations" do
997+
require "#{app_path}/config/environment"
998+
Dir.chdir(app_path) do
999+
generate_models_for_animals
1000+
rails "db:migrate"
1001+
assert_not File.read("db/schema.rb").include?("director")
1002+
1003+
1004+
primary_mtime = File.mtime("db/schema.rb")
1005+
animals_mtime = File.mtime("db/animals_schema.rb")
1006+
1007+
app_file "db/migrate/02_create_movies.rb", <<-MIGRATION
1008+
class CreateMovies < ActiveRecord::Migration::Current
1009+
create_table(:movies) { |t| t.string :director }
1010+
end
1011+
MIGRATION
1012+
1013+
app_file "db/animals_migrate/02_new_animals.rb", <<-MIGRATION
1014+
class NewAnimals < ActiveRecord::Migration::Current
1015+
create_table(:cats) {}
1016+
end
1017+
MIGRATION
1018+
1019+
rails "db:migrate:reset:primary"
1020+
1021+
assert File.read("db/schema.rb").include?("director")
1022+
assert File.mtime("db/schema.rb") > primary_mtime
1023+
assert_equal animals_mtime, File.mtime("db/animals_schema.rb")
1024+
assert_not File.read("db/animals_schema.rb").include?("cats")
1025+
end
1026+
end
1027+
9961028
test "db:prepare works on all databases" do
9971029
require "#{app_path}/config/environment"
9981030
db_prepare

0 commit comments

Comments
 (0)