【问题标题】:In Rails, how do I go over a db migration without executing it?在 Rails 中,如何在不执行数据库迁移的情况下完成它?
【发布时间】:2013-06-15 09:32:48
【问题描述】:

所以我在工作中加入了这个 Rails 项目,我在本地 devbox 上运行了我自己的副本。我尝试运行测试以查看结果,但 rake 回来抱怨说我首先要进行 5 次出色的迁移。我刚开始尝试运行rake db:migrate,但由于迁移试图​​创建已经存在的表,所以这不起作用。那时我意识到这些迁移已经运行,但由于某种原因它认为它目前处于较旧的迁移。

有没有什么方法可以让 Rake 在迁移历史中向前移动,而不需要回滚和重做迁移?

【问题讨论】:

  • 出于兴趣,您可以尝试在命令提示符中执行以下rake db:drop && rake db:create && rake db:migrate
  • 运行 rake db:test:prepare 应该使测试数据库与开发数据库进行相同的迁移

标签: ruby-on-rails database rake rails-migrations


【解决方案1】:

您可以更新 schema_migrations 表以包含您想要跳过的迁移编号。这是 rails 用来跟踪已经运行的迁移的表格。

select * from schema_migrations

会给你类似的东西

   version     
----------------
 20121026165533
 20121026183631
 20121212144141
 20130205205009

将要跳过的迁移编号添加到此表中。

【讨论】:

    【解决方案2】:

    你可以:

    1. 删除有问题的迁移,创建一组新的迁移来代替它们(危险)

    2. 按照您提到的执行 rake db:reset。

    如果您是该项目的唯一开发人员,我只会建议 1。然而,实际上,您的迁移和种子应该处于不保证这一点的状态。

    我恳请您选择 #2,因为 #1 可能会导致问题出现。如果您运行 rake db:reset,您的数据库副本应该代表您将获得的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多