首页 > 解决方案 > 有没有办法跳过迁移文件的错误并继续下一个文件(Ruby on rails + mysql)?

问题描述

我的应用程序中有 424 个迁移文件,其中一些有效,而另一些无效(直接对模型文件进行了更改),我需要运行所有这些文件作为解决其他问题的一部分,问题是每次其中一个文件失败,它会放弃整个过程。

除了将迁移编号插入 schema_migrations 之外,还有其他方法吗?

标签: mysqlruby-on-railsmigrationdatabase-migration

解决方案


如果您不再需要迁移,只需删除迁移文件即可。如果您正在使用版本控制,您以后可以随时取消删除它。但是如果你可以在生产中跳过它,我不知道你为什么会再次需要它。

如果删除它不是一个选项,则意味着您需要它并且应该修复它。app出于您所描述的确切原因,迁移不应引用目录中的模型。模型可能会以导致旧迁移失败的方式发生变化。

如果您可以使用纯 SQL 修复迁移以工作,那是最好的选择。

如果您出于某种原因需要使用 AR 模型,则应在迁移中声明一个仅包含您需要的最小模型。这样,您的迁移就不会受到任何未来模型更改的影响。这是一个简单的例子。在这种情况下,我实际上只使用 SQL,但为了演示:

class UpdateUserDisplayNames < ActiveRecord::Migration
  # Any reference to User in the scope of this migration will
  # reference this class, insulating the migration from changes
  # to the User class in app/models
  class User < ApplicationRecord; end;

  def up
    User.find_each do |u|
      u.update!(display_name: "#{u.first_name} #{u.last_name}"
    end
  end
end

推荐阅读