Я потратил некоторое время на этот баг и хотел сообщить вам о своих выводах. По сути, я подтвердил всё, что вы уже сказали: процесс восстановления выглядит так:
migrate_database
reconnect_database
...
extract_uploads
Проблема в том, что после задачи миграции reconnect_database не переключается на нужную базу данных, а начинает работать с базой по умолчанию.
Поэтому этот код некорректен:
def extract_uploads
...
current_db_name =
RailsMultisite::ConnectionManagement.current_db # default
optimized_images_exist = File.exist?(File.join(tmp_uploads_path, 'optimized'))
Хакерское решение — использовать здесь @current_db, который всё ещё содержит правильное имя, вместо RailsMultisite::ConnectionManagement.current_db, но это не решает реальную проблему: почему reconnect_database работает некорректно.
Мне нужно копнуть глубже, чтобы найти причину.