pad*_*adz 9 ruby schema ruby-on-rails-4 ruby-2.7
升级到 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"
Run Code Online (Sandbox Code Playgroud)
我到处寻找解决方案,并检查了(尽我所能)迁移,其中有很多。在此阶段降级 Ruby 不是一个选择。
有人有类似的情况并设法解决吗?
如果有人还在寻找这个。
该错误是因为在旧版本的rails中,模式转储程序使用将to_s
数据库默认列值转换为字符串,然后对该字符串执行操作。但是在返回冻结字符串的ruby 2.7
方法中,因此如果不能升级 Rails 版本,您可以将其放入初始值设定项中以覆盖模式转储器方法以使用而不是实际字符串。to_s
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
Run Code Online (Sandbox Code Playgroud)
小智 0
我知道您提到过降级 RUby 不适合您。
但如果你能够降级 Ruby,这对我有用。
这是rmlockerd指出的 Ruby 2.7 问题。
我最终将 Ruby 版本降级到“2.6.6”。
降级 Ruby 后,我运行 db:schema:load 并能够重新生成架构文件,而不会出现上述错误。
归档时间: |
|
查看次数: |
1298 次 |
最近记录: |