我使用 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 应用程序上。我不再认为这是代码问题。
您遇到的错误似乎与
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
以查看问题是否仍然存在。如果问题仍然存在,您可以尝试一些其他故障排除步骤:
gem clean
bundle update
rubocop
gem:gem uninstall rubocop
gem install rubocop
如果尝试这些步骤后问题仍然存在,您可能需要检查 RuboCop GitHub 存储库或论坛,了解与 Ruby 3.0.6 和
psych
的此特定错误相关的任何已报告问题,因为这可能是与Ruby 版本或特定 gem。此外,您可以尝试联系 RuboCop 社区以获得进一步的帮助和故障排除。