每当我使用gem命令时,为什么Ruby会抛出语法错误?

时间:2017-12-03 21:04:21

标签: ruby rubygems command-line-interface

这是我第一次尝试使用Ruby。我想安装sass所以我更新了gem并尝试安装sass但是抛出了一个错误。然后我意识到每当我运行gem时都会引发语法错误 - 我无法弄清楚是什么导致这种情况,所有其他类似的情况都发生在他们的代码中的人身上,而不是他们只是运行命令时。

到目前为止,我还没有触及源代码甚至使用gem命令。该错误是一个语法错误,具体来说是:

$ gem
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': /Library/Ruby/Gems/2.0.0/gems/psych-3.0.0/lib/psych/scalar_scanner.rb:146: syntax error, unexpected tIDENTIFIER, expecting ')' (SyntaxError)
      klass.new(yy, m, dd, hh, mm, ss+us/(1_000_000r), offset)
                                                    ^
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Library/Ruby/Gems/2.0.0/gems/psych-3.0.0/lib/psych/nodes/node.rb:4:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Library/Ruby/Gems/2.0.0/gems/psych-3.0.0/lib/psych/nodes.rb:2:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Library/Ruby/Gems/2.0.0/gems/psych-3.0.0/lib/psych.rb:14:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems.rb:585:in `load_yaml'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/config_file.rb:314:in `load_file'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/config_file.rb:191:in `initialize'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/gem_runner.rb:66:in `new'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/gem_runner.rb:66:in `do_configuration'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/gem_runner.rb:46:in `run'
    from /usr/bin/gem:21:in `<main>'

1 个答案:

答案 0 :(得分:3)

这是known bug中的the gemspec of Psych 3.0.0,列出了required Ruby version as >= 1.9.2,即使Psych 3.0.0实际上需要Ruby 2.2.2(在您的情况下导致错误的特定语法)在Ruby 2.1中引入:)

s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")

problem has been fixed in the repository,但尚未发布包含该修复程序的版本。

错误报告中提到了解决问题的必要步骤,基本上你需要手动删除b0rked Psych 3.0.0 gem目录,然后你可以卸载Psych 3.0.0,之后你需要确保你不能再安装3.0.0:

  

仅供参考,如第一篇文章所述,任何登陆该问题的人,即使gem命令甚至无法工作:

     
      
  • 你必须rm -rf psych 3.0.0的gem目录。 (之后,gem命令应该起作用)
  •   
  • 然后你可以gem uninstall psych -v 3.0.0
  •   
  • 然后,在版本3.0.0修复之前,您必须将gem 'psych', '< 3.0.0'添加到您的Gemfile中。
  •   
  • 您可能需要运行bundle update才能接受您对心理版本的更改。
  •