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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每当我使用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>'
答案

这是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才能接受您对mental的版本的更改。

以上是关于每当我使用gem命令时,为什么Ruby会抛出语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails - 需要重新加载模型时的不一致性?

在 Ruby 中解析 gem 式命令行参数的最简单方法

Ruby on Rails:运行 rake 命令时出现错误消息

尝试在 ruby​​ 上安装 gem(Windows 10)[重复]

在Ruby中捆绑gem加载错误

为啥 jsonwebtoken 会抛出“无效签名”错误?