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



这是我第一次尝试与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>'

这是Psych 3.0.0 Gemspec中的一个已知错误,即使Psych 3.0.0实际上需要Ruby 2.2.2(特定的语法,它将所需的Ruby版本列为>= 1.9.2在Ruby 2.1中引入了您的案件错误,这导致了错误。

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

该问题已在存储库中解决,但尚未有包含该修复的版本。

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

fyi,对于第一篇文章中所述的任何降落在问题上的人,即使是gem命令甚至无法正常工作:

  • 您必须rm -rf Psych 3.0.0的宝石目录。(之后,GEM命令应该起作用)
  • 然后您可以做gem uninstall psych -v 3.0.0
  • 然后,直到修复版本3.0.0之前,您必须将 gem 'psych', '< 3.0.0'添加到gemfile。
  • 您可能必须运行bundle update才能接受您对Psych的版本的更改。

最新更新