15

我为我的 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是我不知道它回到开始的步数。

我有哪些选择?

4

3 回答 3

25
rake db:migrate VERSION=0

即使您使用较新的时间戳迁移文件,它也可以工作。

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

于 2009-07-28T21:23:57.637 回答
3

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

于 2009-07-29T14:23:18.070 回答
0

这有点骇人听闻,但是您可以进行查询以在 schema_migrations 中找到第一个 VERSION,然后调用 rake db:migrate:down 来获取该 VERSION(我假设您想为您的应用打包一个“重置”脚本)。

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

于 2009-07-28T20:14:50.210 回答