Luc*_*ord 44 database migration ruby-on-rails ruby-on-rails-3
是否有针对所有迁移的快速rake db:rollback命令?
Ale*_*lke 139
虽然@Orlandos的响应是正确的,__CODE__
但不会重做所有迁移,并且正如他所说,从最后一个模式加载数据.如果要撤消所有迁移,然后重做它们,则应使用:
rake db:migrate VERSION=0
Run Code Online (Sandbox Code Playgroud)
您可以在这篇文章中看到更多信息:rake db:migrate db:reset和db:schema:load之间的区别
Cla*_*ani 26
如果您确实想要回滚所有迁移,而不仅仅是将数据库置于原始状态或最后一个模式,则必须运行:
rake db:migrate VERSION=0
Run Code Online (Sandbox Code Playgroud)
这实际上会在每次迁移时完全回滚,并确保每次迁移都是可逆的.
如果你现在发行
rake db:migrate:status
Run Code Online (Sandbox Code Playgroud)
您将看到所有迁移仍然存在,但它们处于"向下"(未应用)状态.
其他暗示a rake db:reset
或rake db:drop
(例如@Orlando或@Alex Falke的答案)的命令根本不会进行任何回滚:也就是说,它们不会确保每次迁移都是可逆的.
此外,rake db:drop
在其他用户访问数据库时无法运行,而回滚可以实时执行(即使通常不建议这样做).最后但并非最不重要的是,简单地删除和重新创建数据库也将删除模式迁移表:如果有人rake db:migrate:status
在数据库被删除后运行,他将回复"模式迁移表尚不存在"并且没有任何线索哪些迁移可以应用(除非他现在知道或可以列出它们).
Orl*_*ndo 13
只需使用rake db:reset
,即可删除数据库(与撤消所有迁移相同)并重置为最后一个模式.
更新:将使用更正确的方法rake db:migrate:reset
.这将删除数据库,再次创建它并运行所有迁移,而不是重置为最新的模式.