我正在运行Ruby 1.9.3p392并且我已经安装了最新的Chef gem(11.4.2)。当我尝试运行任何主厨命令行实用程序时,我收到以下错误:
bin/ruby_noexec_wrapper:14: stack level too deep (SystemStackError)
实际上,运行以下命令也会导致抛出类似的错误:
require 'rubygems'
gem 'chef' # or gem 'chef', '11.4.2'
深入挖掘,我发现问题似乎源于lib / ruby / site_ruby / 1.9.1 / rubygems / requirement.rb:
lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:24: stack level too deep (SystemStackError)
这是奇怪的,因为该行是一个块的一部分,它定义了代表各种需求操作的lambda的散列(即;是版本=,是版本1> =版本2等)。
class Gem::Requirement
OPS = { #:nodoc:
"=" => lambda { |v, r| v == r },
"!=" => lambda { |v, r| v != r },
">" => lambda { |v, r| v > r },
"<" => lambda { |v, r| v < r },
">=" => lambda { |v, r| v >= r }, # <-- line 24
"<=" => lambda { |v, r| v <= r },
"~>" => lambda { |v, r| v >= r && v.release < r.bump }
}
#...
end
向下滚动文件,我发现可以调用的唯一地点OPS[">="]
位于第198行:
def satisfied_by? version
raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless
Gem::Version === version
# #28965: syck has a bug with unquoted '=' YAML.loading as YAML::DefaultKey
requirements.all? { |op, rv| (OPS[op] || OPS["="]).call version, rv } # <-- line 198
end
我注意到在运行requirements.all?
时,要求设置为[[">=", #<Gem::Version "0">]]
。它似乎正在评估<Gem::Version "11.4.2"> >= <Gem::Version "0">
。
我整天都在努力工作,但我还没有深究。有人能帮我理解为什么RubyGems会抛出这个错误吗?
感谢。
编辑:Chef似乎在1.8.7上正常运行。它可能是1.9.3的问题吗?