Ruby on Rails错误:类StringIO的超类不匹配(类型错误)

14

我在创建一个Ruby on Rails项目时遇到了一个错误。我在终端中输入rails new clubbundle命令来创建新项目。现在,当我尝试通过输入rails g resource Club name来创建我的模型和控制器时,出现了这个错误:superclass mismatch for class StringIO (TypeError)

gems/bootsnap-1.9.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:
in `require': superclass mismatch for class StringIO (TypeError)

我甚至没有一个名为StringIO的类,所以我不确定它来自哪里。

  • Ruby版本:2.6.8
  • Rails版本:6.1.4.1

请添加您的 Ruby 和 Rails 版本,并粘贴堆栈跟踪中的相关部分。 - dbugger
Ruby on Rails 版本:2.6.8 - Paparoo
注释不是永久的 - 请编辑问题。 - dbugger
我尝试注释掉 bootsnap,但是出现了这个错误:cannot load such file -- bootsnap/setup (LoadError) - Paparoo
@JaredBeck 我也找到了这两个问题,都是本月的,并且没有解决方案。 https://stackoverflow.com/questions/69902775/getting-error-trying-to-start-ruby-on-rails https://dev59.com/qav2oIgBc1ULPQZFTUCX - thenninger
显示剩余6条评论
7个回答

18

尝试回滚到较早的StringIO版本。

gem install stringio -v 0.1.4

gem uninstall stringio # remove 3.0.0 and 3.0.1

11
即使没有安装特定版本,我只需运行gem uninstall stringio即可移除所有非默认版本,成功解决了这个问题。 - RedBassett
3
删除而不添加对我也起作用了。 - Jeff

7

正如其他人在 @jason-lee 的回答中所说,对于许多人来说,只需卸载现有的 stringio 然后再次运行 bundle install 即可解决该问题。

    gem uninstall stringio
    bundle

6

以上答案对我都没有用。我的情况是我在 Gemfile 中添加了 gem 'rubocop', '~> 0.67.2', require: false 并运行了 bundle install

这个版本的 rubocop 安装了 psych 作为依赖,而 psych 又依赖于 stringio,我的理解是,这可能与 bootsnap 使用的 stringio 版本产生冲突。

无论如何,为了解决这个问题,我只需删除我添加到 Gemfilerubocop 行,并添加 gem 'rubocop', require: false(安装最新版本的 rubocop),然后再次运行 bundle install


1
有趣的是,我刚刚删除了stringio gem,事情就开始正常工作了。不确定它是否与psych有任何关系。这很疯狂,但你的帖子帮助了我。 - akostadinov

3

在更新了我的gems之后,我开始遇到这个错误。我尝试卸载ruby和所有的gems,更新rvm,但对我来说解决方案似乎是更新rubygems。

gem update --system

1
我尝试过了,但是没有成功。 - Paparoo
这对我来说在 Ruby 2.6.10 上有效,但你的情况可能会有所不同。 - Eliot Sykes
在 Ruby 2.7.2p137 上运行良好。 - Roshan

2

这对我很有效。

我的错误是:应用程序遇到以下错误:StringIO类的超类不匹配(TypeError)

问题是由此问题引起的: https://www.redmine.org/issues/35435

这可能会对您有所帮助。我还删除了与#gem 'sdoc'相关的所有gems。 似乎默认情况下,sdoc在内部调用gem 'psych',它使用StringIO和两个版本不同,您可以在GemFile.Lock中检查差异以查看您的2个版本之间的差异。


0

在Ubuntu上安装RVM(路径相关问题):

退出所有终端

exit

然后打开一个新的终端,输入以下命令:

rvm use [your version]
bundle install
rails c

0
当我将Ruby版本从2.7.6升级到3.0.4时,错误消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接