Rails执行rails g resource命令报StringIO超类不匹配TypeError错误
这个报错是bootsnap 1.9.1版本与Ruby 2.6.8的兼容性问题导致的:该版本bootsnap的加载路径缓存逻辑会重复定义Ruby标准库的StringIO类,触发超类不匹配的类型错误,和你编写的业务代码无关。
可通过以下任意方案解决:
- 升级bootsnap到兼容版本
修改项目Gemfile中bootsnap的版本约束为gem 'bootsnap', '>= 1.10.0',随后执行bundle update bootsnap更新gem,再执行rm -rf tmp/cache清除项目本地缓存,重新运行生成命令即可。 - 临时禁用bootsnap
打开项目config/boot.rb文件,注释掉require 'bootsnap/setup'这一行,即可绕开兼容问题直接执行生成命令,后续需要使用bootsnap时升级版本后取消注释即可。 - 排查冗余的stringio gem
如果上述方案都不生效,执行gem list stringio检查是否额外安装了独立于Ruby标准库的stringio gem,如果存在非系统自带版本,执行gem uninstall stringio选择卸载对应版本即可解决冲突。
内容的提问来源于stack exchange,提问作者Paparoo
相关产品推荐
相关产品推荐

