Agora à pouco eu falei sobre Timestamped Migrations, e reclamei que isto ainda não resolvia o problema com as migrations. Depois disso eu pensei que talvez a solução fosse armazenar na tabela schema_info todas as migrations executadas e cada vez que rodássemos um rake db:migrate o Rails verificasse quais scripts não foram executados, fizesse um rollback até o primeiro não executado e então rodasse tudo denovo até o fim. Na teoria isto resolveria os problemas das migrations.
Pois é, não fui só eu que pensei nisto…
Isto já está implementado para o Rails 2.1. A única diferença da minha idéia é que criaram uma outra tabela para isto, chamada schema_migrations.
Não sei, mas acho que isto resolve o problema com as migrations.