所以我在工作中加入了这个 Rails 项目,我在本地 devbox 上运行了我自己的副本。我试图运行测试以查看结果,但 rake 回来抱怨说我首先要进行 5 次出色的迁移。我刚开始尝试运行rake db:migrate
,但由于迁移试图创建已经存在的表,所以没有成功。那时我意识到这些迁移已经运行,但由于某种原因它认为它目前处于较旧的迁移。
有什么方法可以让 Rake 在迁移历史中向前推进,而不需要回滚和重做迁移?
所以我在工作中加入了这个 Rails 项目,我在本地 devbox 上运行了我自己的副本。我试图运行测试以查看结果,但 rake 回来抱怨说我首先要进行 5 次出色的迁移。我刚开始尝试运行rake db:migrate
,但由于迁移试图创建已经存在的表,所以没有成功。那时我意识到这些迁移已经运行,但由于某种原因它认为它目前处于较旧的迁移。
有什么方法可以让 Rake 在迁移历史中向前推进,而不需要回滚和重做迁移?
您可以更新 schema_migrations 表以获取要跳过的迁移编号。这是 rails 用来跟踪已经运行的迁移的表格。
select * from schema_migrations
会给你类似的东西
version
----------------
20121026165533
20121026183631
20121212144141
20130205205009
将要跳过的迁移编号添加到此表中。
您可以:
删除有问题的迁移,创建一组新的迁移来代替它们(危险)
做你提到的 rake db:reset 。
如果您是该项目的唯一开发人员,我只会建议 1。然而,实际上,你的迁移和种子应该处于不保证这一点的状态。
我恳请您选择#2,因为#1 可能会导致问题出现。如果您运行 rake db:reset ,您的数据库副本应该代表您将获得的结果。