如何在不先删除数据库的情况下将带有rails的数据库迁移到第一个修订版?

我为我的Rails安装设置了一个数据库,并设置了一些迁移。 我希望能够将我的数据库重置为没有表/约束/等等,但是在不知道迁移次数或第一次迁移的时间戳的情况下找不到合理的方法。 我看到以下是我的选择:

  • rake db:migrate:reset
  • rake db:migrate:down VERSION=20090701154839其中20090701154839是与第一次迁移相关的时间戳
  • rake db:rollback STEP=15 ,其中有15次迁移

db:migrate:reset的问题在于它首先丢弃数据库(它执行db:dropdb:create ,然后db:migrate )。

db:migrate:down是我不想编码开头的VERSION。

db:rollback的问题在于我不知道它回到开头的步骤数。

我有什么选择?

 rake db:migrate VERSION=0 

即使您使用较新的带时间戳的迁移文件,它也能正常工作。

更新:我刚刚在Rails 3.2.1上测试了它,它仍然有效。 它运行schema_migrations已知的所有迁移的“向下”部分。 我不知道它是否适用于3.1,但下面的评论表明此function在此期间被破坏了。

除了上面的jdl(正确)解决方案之外,另一种实现此目的的hack-y方法是执行rake db:rollback STEP=1000000 ,其中1000000是一个大数字,大于您将拥有的迁移数量。 它将尽可能地回滚到1000000次,或者作为STEP

它是适度的hackish,但你可以查询找到schema_migrations中的第一个VERSION,然后调用rake db:migrate:down来获取该VERSION(我假设你想为你的应用程序打包一个“重置”脚本)。

当然,这将要求所有迁移的down方法正常工作。