我为我的Rails安装设置了数据库,并设置了一些迁移。我希望能够将我的数据库重置为没有表/约束/等等,但是在不知道迁移次数或第一次迁移的时间戳的情况下找不到合理的方法。我看到以下是我的选择:
rake db:migrate:reset
rake db:migrate:down VERSION=20090701154839
其中20090701154839是与第一次迁移相关联的时间戳rake db:rollback STEP=15
已有15次迁移 db:migrate:reset
的问题在于它首先丢弃了数据库(db:drop
,db:create
,然后db:migrate
)。
db:migrate:down
的问题在于我不想对开头的VERSION进行编码。
db:rollback
的问题在于我不知道它回到开头的步数。
我有什么选择?
答案 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方法都能正常工作。