是否有针对所有迁移的快速rake db:rollback命令?
答案 0 :(得分:127)
虽然@Orlandos的回复是正确的,但rake db:reset
不会重做所有迁移,并且正如他所说,从最后一个模式加载数据。
如果要撤消所有迁移,然后重做它们,则应使用:
rake db:migrate:reset #runs db:drop db:create db:migrate
您可以在此信息中查看更多信息:Difference between rake db:migrate db:reset and db:schema:load
答案 1 :(得分:23)
如果您确实想回滚所有迁移,而不仅仅是将数据库置于原始状态或最后一个架构,则必须运行:
rake db:migrate VERSION=0
这实际上会在每次迁移时完全回滚,并确保每次迁移都是可逆的。
如果您现在发出
rake db:migrate:status
你会发现所有的迁移仍然存在,但是他们正处于“倒下”的状态。 (未申请)州。
暗示rake db:reset
或rake db:drop
的其他命令(例如@Orlando或@Alex Falke的答案)根本不会做任何回滚:也就是说,他们赢了# 39;确保每次迁移都是可逆的。
此外,在其他用户访问数据库时,rake db:drop
无法运行,而回滚可以实时执行(即使通常不建议这样做)。最后但并非最不重要的是,简单地删除和重新创建数据库也将删除模式迁移表:如果有人在数据库被删除后运行rake db:migrate:status
,他将回复"模式迁移表不存在然而"并且没有关于可以应用哪些迁移的线索(除非他现在知道或可以列出它们)。
答案 2 :(得分:14)
只需使用rake db:reset
即可删除数据库(与撤消所有迁移相同)并重置为最后一个模式。
更新:更正确的方法是使用rake db:migrate:reset
。这将删除数据库,再次创建它并运行所有迁移,而不是重置为最新的模式。
答案 3 :(得分:0)
如果出现权限问题(就像我发生的那样),也许您可以尝试删除所有数据库表,就像我对rubymine所做的一样(只需打开数据库工具窗口,选择所有表并单击鼠标右键-> drop),它应该与其他IDE类似。在删除操作中方便地忽略了诸如sqlite_master和sqlite_sequence之类的表。
这允许我做
rails db:migrate
,一切正常。当然,您会丢失所有数据!