每当我使用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 on Rails:运行 rake 命令时出现错误消息