rubocop 在 Rails 6 和 Ruby 3 上失败

问题描述 投票:0回答:1

我使用 Rails 6.1.7.7 和 Ruby 3.0.6p216 创建了一个原始的新 Rails 应用程序 (

rails new myapp
)。我使用的是运行 Sonoma 14.2 的 Apple M2 Pro。

我安装了 rubocop 并将其添加到 Gemfile 中。

rvm @global do gem install rubocop

尝试在有或没有

rubocop
的情况下执行
bundle exec
,我都会收到错误。 rubocop 就在我的路上,

myapp % which rubocop
/Users/.../.rvm/gems/ruby-3.0.6/bin/rubocop

运行

rubocop
给我一个递归错误(在原始 Rails 应用程序中)

myapp % rubocop
/Users/.../.rvm/rubies/ruby-3.0.6/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:128:in `visit_Psych_Nodes_Scalar': stack level too deep (SystemStackError)
    from /Users/.../.rvm/rubies/ruby-3.0.6/lib/ruby/3.0.0/psych/visitors/visitor.rb:30:in `visit’

也与

bundle exec
:

myapp % bundle exec rubocop
bundler: failed to load command: rubocop (/Users/.../.rvm/gems/ruby-3.0.6/bin/rubocop)
/Users/.../.rvm/rubies/ruby-3.0.6/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:52:in `deserialize': stack level too deep (SystemStackError)
    from /Users/.../.rvm/rubies/ruby-3.0.6/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:128:in `visit_Psych_Nodes_Scalar'

我尝试摆脱心理,但它被认为是默认的。

myapp % gem uninstall psych
Gem psych-3.3.2 cannot be uninstalled because it is a default gem

任何想法将不胜感激。我花了很多时间在我的代码中寻找递归问题,现在发现这个错误也发生在一个全新的 Rails 应用程序上。我不再认为这是代码问题。

ruby-on-rails ruby rubocop
1个回答
0
投票

您遇到的错误似乎与

psych
gem 中的递归方法调用导致的堆栈溢出有关,该 gem 用于 Ruby 中的 YAML 解析和序列化。

此问题的一个潜在解决方案是尝试更新

psych
gem,看看新版本是否可以解决该问题。由于
psych
是 Ruby 中的默认 gem,因此您可能需要更新 Ruby 版本才能获取最新版本的
psych

您可以尝试使用 RVM 更新您的 Ruby 版本:

rvm install ruby-3.0.7

然后,将此 Ruby 版本设置为默认版本:

rvm --default use ruby-3.0.7

更新 Ruby 版本后,尝试再次运行

rubocop
以查看问题是否仍然存在。如果问题仍然存在,您可以尝试一些其他故障排除步骤:

  1. 清除宝石缓存:
gem clean
  1. 更新项目中的所有 gem:
bundle update
  1. 重新安装
    rubocop
    gem:
gem uninstall rubocop
gem install rubocop

如果尝试这些步骤后问题仍然存在,您可能需要检查 RuboCop GitHub 存储库或论坛,了解与 Ruby 3.0.6 和

psych
的此特定错误相关的任何已报告问题,因为这可能是与Ruby 版本或特定 gem。此外,您可以尝试联系 RuboCop 社区以获得进一步的帮助和故障排除。

© www.soinside.com 2019 - 2024. All rights reserved.