Если БД MySQL, то там, если мне не изменяет память, не работают транзакции на создание\удаление таблиц. Столкнулся с подобной проблемой при создании таблиц, например:
Создать таблицу А, добавить внешний ключ А к Б. Все это обернуто в safeUp. Если в описании создания ключа Б ошибка, то таблицу А миграция создаст, а на создание ключа вывалит эксепшен. Отредактировав эту миграцию при попытке ее применить повторно будет вылетать эксепшен, что таблица А уже существует.