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

运行Chef时,RubyGems抛出一个系统堆栈错误,ruby,rubygems,bundler,chef-infra,Ruby,Rubygems,Bundler,Chef Infra,我正在运行Ruby 1.9.3p392,并且安装了最新的chef gem(11.4.2)。当我尝试运行任何chef命令行实用程序时,会出现以下错误: bin/ruby\u noexec\u包装器:14:堆栈级别太深(SystemStackError) 事实上,运行以下命令也会引发类似的错误: require 'rubygems' gem 'chef' # or gem 'chef', '11.4.2' 再深入一点,我发现这个问题似乎起源于lib/ruby/site_ruby/1.9.1/rub

我正在运行Ruby 1.9.3p392,并且安装了最新的chef gem(11.4.2)。当我尝试运行任何chef命令行实用程序时,会出现以下错误:

bin/ruby\u noexec\u包装器:14:堆栈级别太深(SystemStackError)

事实上,运行以下命令也会引发类似的错误:

require 'rubygems'
gem 'chef' # or gem 'chef', '11.4.2'
再深入一点,我发现这个问题似乎起源于lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:

lib/ruby/site\u ruby/1.9.1/rubygems/requirement.rb:24:堆栈级别太深(SystemStackError)

这很奇怪,因为该行是一个块的一部分,该块定义了表示各种需求操作的lambda散列(即,是versions=,是version1>=version2,等等)

我注意到在运行
requirements.all?
时,requirements被设置为
[[“>=”,#]]
。它似乎在评估
=

我整天都在做这件事,但我还没有弄清真相。有人能帮我理解为什么RubyGems会抛出这个错误吗

谢谢


编辑:厨师在1.8.7上似乎运行良好。这可能是1.9.3的问题吗?

如果你写
gem'chef',11.4.2'
,会发生什么?@RyanBigg不幸的是,同样的事情。它对我有用。你正在运行什么版本的rubygems?我在1.8.24上。@EricR我升级了我系统中的所有内容以匹配您的版本,并且所有内容都正常工作。或许可以尝试重新安装Ruby 1.9.3?@davogones我已经安装了。不走运。
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
  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