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

时间:2009-07-28 19:39:57

标签: ruby-on-rails database migration rake

我为我的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的问题在于我不知道它回到开头的步数。

我有什么选择?

3 个答案:

答案 0 :(得分:25)

rake db:migrate VERSION=0

即使您使用较新的带时间戳的迁移文件,它仍然有效。

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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