ruby - Rails 4, Ruby 2.7.1 schema.rb 显示“Could not dump table because of following FrozenError”
问题描述
升级到 Ruby 2.7.1 后,我的 schema.rb 出现了多个表的以下警告:
# Could not dump table "pages" because of following FrozenError
# can't modify frozen String: "false"
# Could not dump table "proxies" because of following FrozenError
# can't modify frozen String: "true"
我已经到处寻找解决方案,并检查了(尽我所能)迁移,其中有很多。在这个阶段降级 Ruby 不是一种选择。
有人遇到类似情况并设法解决了吗?
解决方案
如果有人还在寻找这个。
该错误是因为在旧版本的 rails 中,模式转储程序使用to_s
将数据库默认列值转换为字符串,然后对该字符串执行操作。但是在返回冻结字符串ruby 2.7
的to_s
方法中,因此如果升级 rails 版本不是一个选项,您可以将其放在初始化程序中以覆盖模式转储方法以使用而不是实际字符串。nil, true and false
FrozenError
dup
module ActiveRecord
module ConnectionAdapters
module ColumnDumper
def prepare_column_options(column, types)
spec = {}
spec[:name] = column.name.inspect
spec[:type] = column.type.to_s
spec[:null] = 'false' unless column.null
limit = column.limit || types[column.type][:limit]
spec[:limit] = limit.inspect if limit
spec[:precision] = column.precision.inspect if column.precision
spec[:scale] = column.scale.inspect if column.scale
default = schema_default(column).dup if column.has_default?
spec[:default] = default unless default.nil?
spec
end
end
end
end
推荐阅读
- node.js - 如何在 node.js 中集成 FCM 以进行推送通知?
- ios - 使用 Swift 在 iOS 中获取 CellID 和位置区号(LAC)
- git - 如何从 github repo 中的提交中删除凭据?
- android - 字符串中未转义的撇号
- r - 导入具有奇怪列间距的文本文件
- azure-service-fabric - 为什么删除了 SF Stateless Web API 模板?
- maven - Javax 和 org 导入不起作用尝试了一切。什么都行不通,为什么?
- stata - 创建具有最大值的新数据集
- amazon-web-services - 外壳脚本的 AWS Code Deploy 部署失败
- javascript - 仅在提示答案正确后才显示 H1 Javascript