mysql - 有没有办法跳过迁移文件的错误并继续下一个文件(Ruby on rails + mysql)?
问题描述
我的应用程序中有 424 个迁移文件,其中一些有效,而另一些无效(直接对模型文件进行了更改),我需要运行所有这些文件作为解决其他问题的一部分,问题是每次其中一个文件失败,它会放弃整个过程。
除了将迁移编号插入 schema_migrations 之外,还有其他方法吗?
解决方案
如果您不再需要迁移,只需删除迁移文件即可。如果您正在使用版本控制,您以后可以随时取消删除它。但是如果你可以在生产中跳过它,我不知道你为什么会再次需要它。
如果删除它不是一个选项,则意味着您需要它并且应该修复它。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
推荐阅读
- azure - ARM 部署错误 - 请求内容无效,无法反序列化:'无法反序列化当前 JSON 数组
- python - trace32 python api读取内存地址-如何?
- excel - 为工作簿中的多个工作表设置动态范围,不包括 2 个工作表。(错误 438)VBA
- kotlin - 保留有关失败项目处理的详细信息
- laravel - Laravel - 在中间件中更改路线
- reactjs - TypeError:未定义不是一个对象(评估'navigation.route.params')
- firebase - 如果用户登录或未登录,则无法更新页面。扑火
- meteor - 如何在 BigBlueButton html5-client 中进行 HTML 更改或自定义模块(如 poll)?
- php - 用一列中的值链接的 MySQL 表数据构建多维 PHP 数组
- python - Python中的时间戳、时间增量和转换