From af9b2af7195b2c685dac2e0a6ca9d26e884928e7 Mon Sep 17 00:00:00 2001 From: Roberto Miranda Date: Wed, 27 Mar 2019 15:12:00 +0000 Subject: Add rake db:prepare rake task. It Creates the database, loads the schema, run the migrations and initializes with the seed data (use db:reset to also drop the database first). This rake task runs in an idempotent way ref https://github.com/rails/rails/pull/33139#discussion_r195930751 --- activerecord/lib/active_record/railties/databases.rake | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index f021a8f6c4..ee3668e1a9 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -222,6 +222,14 @@ db_namespace = namespace :db do 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] + desc "Creates the database, loads the schema, run the migrations and initializes with the seed data (use db:reset to also drop the database first)" + task prepare: :load_config do + ActiveRecord::Base.connection + db_namespace["migrate"].invoke + rescue ActiveRecord::NoDatabaseError + db_namespace["setup"].invoke + end + desc "Loads the seed data from db/seeds.rb" task seed: :load_config do db_namespace["abort_if_pending_migrations"].invoke -- cgit v1.2.3 From c6734789ad80a83670bd69c96602a79c1bec36d2 Mon Sep 17 00:00:00 2001 From: Roberto Miranda Date: Wed, 27 Mar 2019 15:25:30 +0000 Subject: Improve db:prepare description --- activerecord/lib/active_record/railties/databases.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index ee3668e1a9..2328529817 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -222,7 +222,7 @@ db_namespace = namespace :db do 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] - desc "Creates the database, loads the schema, run the migrations and initializes with the seed data (use db:reset to also drop the database first)" + desc "Setup database if doesn’t exist already and run migrations" task prepare: :load_config do ActiveRecord::Base.connection db_namespace["migrate"].invoke -- cgit v1.2.3 From 8375b8ee6da72152193df409c91f7f35f71b6836 Mon Sep 17 00:00:00 2001 From: Roberto Miranda Date: Wed, 27 Mar 2019 17:10:44 +0000 Subject: Move db:migrate call to else block --- activerecord/lib/active_record/railties/databases.rake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 2328529817..b022fe942a 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -225,9 +225,10 @@ db_namespace = namespace :db do desc "Setup database if doesn’t exist already and run migrations" task prepare: :load_config do ActiveRecord::Base.connection - db_namespace["migrate"].invoke rescue ActiveRecord::NoDatabaseError db_namespace["setup"].invoke + else + db_namespace["migrate"].invoke end desc "Loads the seed data from db/seeds.rb" -- cgit v1.2.3 From 098e4d25f19f2b932841401fdc5e7340876d8ff2 Mon Sep 17 00:00:00 2001 From: Roberto Miranda Date: Tue, 2 Apr 2019 15:11:09 +0100 Subject: Add test cases for rake db:prepare --- activerecord/lib/active_record/railties/databases.rake | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index b022fe942a..ef8292de2b 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -222,13 +222,16 @@ db_namespace = namespace :db do 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] - desc "Setup database if doesn’t exist already and run migrations" + desc "Runs setup if database does not exist, or runs migrations if it does" task prepare: :load_config do - ActiveRecord::Base.connection - rescue ActiveRecord::NoDatabaseError - db_namespace["setup"].invoke - else - db_namespace["migrate"].invoke + ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config| + begin + ActiveRecord::Base.establish_connection(db_config.config) + db_namespace["migrate"].invoke + rescue ActiveRecord::NoDatabaseError + db_namespace["setup"].invoke + end + end end desc "Loads the seed data from db/seeds.rb" -- cgit v1.2.3 From 900e566a6b8eab17a9955c9be84d2443dc837995 Mon Sep 17 00:00:00 2001 From: Roberto Miranda Date: Tue, 2 Apr 2019 16:45:37 +0100 Subject: =?UTF-8?q?=F0=9F=92=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- activerecord/lib/active_record/railties/databases.rake | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index ef8292de2b..447def8d77 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -225,12 +225,10 @@ db_namespace = namespace :db do desc "Runs setup if database does not exist, or runs migrations if it does" task prepare: :load_config do ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config| - begin - ActiveRecord::Base.establish_connection(db_config.config) - db_namespace["migrate"].invoke - rescue ActiveRecord::NoDatabaseError - db_namespace["setup"].invoke - end + ActiveRecord::Base.establish_connection(db_config.config) + db_namespace["migrate"].invoke + rescue ActiveRecord::NoDatabaseError + db_namespace["setup"].invoke end end -- cgit v1.2.3