运行Chef时,RubyGems会抛出系统堆栈错误

时间:2013-04-24 01:39:31

标签: ruby rubygems bundler chef

我正在运行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 / ruby​​gems / 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的问题吗?

0 个答案:

没有答案