Skip to content

Commit 03187f6

Browse files
authored
Merge pull request rails#51916 from fatkodima/migrations-primary-without-db-tasks
Fix running migrations on other databases when `database_tasks: false` on primary
2 parents 7dbe817 + c5ac244 commit 03187f6

File tree

2 files changed

+90
-7
lines changed

2 files changed

+90
-7
lines changed

activerecord/lib/active_record/railties/databases.rake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ db_namespace = namespace :db do
8989
task migrate: :load_config do
9090
db_configs = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env)
9191

92-
if db_configs.size == 1
92+
if db_configs.size == 1 && db_configs.first.primary?
9393
ActiveRecord::Tasks::DatabaseTasks.migrate
9494
else
9595
mapped_versions = ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions

railties/test/application/rake/multi_dbs_test.rb

Lines changed: 89 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,24 +1261,107 @@ class TwoMigration < ActiveRecord::Migration::Current
12611261
YAML
12621262

12631263
Dir.chdir(app_path) do
1264-
animals_db_exists = lambda { rails("runner", "puts !!(AnimalsBase.lease_connection rescue false)").strip }
1264+
generate_models_for_animals
1265+
1266+
assert_not File.exist?("storage/development_animals.sqlite3")
1267+
assert_not File.exist?("db/animals_schema.rb")
1268+
1269+
error = assert_raises do
1270+
rails "db:migrate:animals" ### Task not defined
1271+
end
1272+
assert_includes error.message, "Unrecognized command"
12651273

1274+
rails "db:migrate"
1275+
assert File.exist?("storage/default.sqlite3")
1276+
assert_not File.exist?("storage/development_animals.sqlite3")
1277+
assert File.exist?("db/schema.rb")
1278+
assert_not File.exist?("db/animals_schema.rb")
1279+
1280+
rails "db:drop"
1281+
assert_not File.exist?("storage/default.sqlite3")
1282+
assert_not File.exist?("storage/development_animals.sqlite3")
1283+
end
1284+
end
1285+
1286+
test "when database_tasks is false on 'primary', then run the database tasks on other dbs" do
1287+
require "#{app_path}/config/environment"
1288+
app_file "config/database.yml", <<-YAML
1289+
development:
1290+
primary:
1291+
database: storage/development.sqlite3
1292+
adapter: sqlite3
1293+
database_tasks: false
1294+
animals:
1295+
database: storage/development_animals.sqlite3
1296+
adapter: sqlite3
1297+
migrations_paths: db/animals_migrate
1298+
YAML
1299+
1300+
Dir.chdir(app_path) do
12661301
generate_models_for_animals
12671302

1268-
assert_equal "true", animals_db_exists.call
1303+
assert_not File.exist?("storage/development.sqlite3")
1304+
assert_not File.exist?("storage/development_animals.sqlite3")
12691305

1270-
assert_not File.exist?("db/animals_schema.yml")
1306+
assert_not File.exist?("db/schema.rb")
1307+
assert_not File.exist?("db/animals_schema.rb")
12711308

12721309
error = assert_raises do
12731310
rails "db:migrate:animals" ### Task not defined
12741311
end
12751312
assert_includes error.message, "Unrecognized command"
12761313

1277-
rails "db:schema:dump"
1278-
assert_not File.exist?("db/animals_schema.yml")
1314+
rails "db:migrate"
1315+
assert_not File.exist?("storage/development.sqlite3")
1316+
assert File.exist?("storage/development_animals.sqlite3")
1317+
assert_not File.exist?("db/schema.rb")
1318+
assert File.exist?("db/animals_schema.rb")
12791319

12801320
rails "db:drop"
1281-
assert_equal "true", animals_db_exists.call
1321+
1322+
assert_not File.exist?("storage/development.sqlite3")
1323+
assert_not File.exist?("storage/development_animals.sqlite3")
1324+
end
1325+
end
1326+
1327+
test "when database_tasks is false on the implicit primary database, then run the database tasks on other dbs" do
1328+
require "#{app_path}/config/environment"
1329+
app_file "config/database.yml", <<-YAML
1330+
development:
1331+
main:
1332+
database: storage/development.sqlite3
1333+
adapter: sqlite3
1334+
database_tasks: false
1335+
animals:
1336+
database: storage/development_animals.sqlite3
1337+
adapter: sqlite3
1338+
migrations_paths: db/animals_migrate
1339+
YAML
1340+
1341+
Dir.chdir(app_path) do
1342+
generate_models_for_animals
1343+
1344+
assert_not File.exist?("storage/development.sqlite3")
1345+
assert_not File.exist?("storage/development_animals.sqlite3")
1346+
1347+
assert_not File.exist?("db/schema.rb")
1348+
assert_not File.exist?("db/animals_schema.rb")
1349+
1350+
error = assert_raises do
1351+
rails "db:migrate:animals" ### Task not defined
1352+
end
1353+
assert_includes error.message, "Unrecognized command"
1354+
1355+
rails "db:migrate"
1356+
assert_not File.exist?("storage/development.sqlite3")
1357+
assert File.exist?("storage/development_animals.sqlite3")
1358+
assert_not File.exist?("db/schema.rb")
1359+
assert File.exist?("db/animals_schema.rb")
1360+
1361+
rails "db:drop"
1362+
1363+
assert_not File.exist?("storage/development.sqlite3")
1364+
assert_not File.exist?("storage/development_animals.sqlite3")
12821365
end
12831366
end
12841367

0 commit comments

Comments
 (0)