我正在尝试在Raspbian上运行不同的宝石,但它们无法正常工作。我尝试了两个宝石:Jekyll和Lolcat。
我已经安装了两个宝石:
pi@moon ~ $ sudo gem install lolcat
Successfully installed lolcat-42.0.99
1 gem installed
Installing ri documentation for lolcat-42.0.99...
Installing RDoc documentation for lolcat-42.0.99...
pi@moon ~ $ sudo gem install jekyll
Successfully installed jekyll-1.4.3
1 gem installed
Installing ri documentation for jekyll-1.4.3...
Installing RDoc documentation for jekyll-1.4.3...
这些是我收到的错误。
pi@moon ~ $ lolcat --help
/usr/lib/ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find lolcat (>= 0)
amongst [bundler-1.5.3, bundler-unload-1.0.2, executable-hooks-1.3.1, gem-wrappers-1.2.4, rubygems-bundler-1.4.2, rvm-1.11.3.9] (Gem::LoadError)
from /usr/lib/ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /usr/lib/ruby/1.9.1/rubygems.rb:1231:in `gem'
from /usr/local/bin/lolcat:22:in `<main>'
pi@moon ~ $ jekyll
/usr/lib/ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find jekyll (>= 0)
amongst [bundler-1.5.3, bundler-unload-1.0.2, executable-hooks-1.3.1, gem-wrappers-1.2.4, rubygems-bundler-1.4.2, rvm-1.11.3.9] (Gem::LoadError)
from /usr/lib/ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /usr/lib/ruby/1.9.1/rubygems.rb:1231:in `gem'
from /usr/local/bin/jekyll:22:in `<main>'
我被建议使用RVM重新安装ruby。我做了,当我运行rvm list
来查看我的ruby版本时,我得到以下内容:
pi@moon ~ $ rvm list
rvm rubies
=> ruby-1.9.1-p431 [ armv6l ]
* ruby-2.1.0 [ armv6l ]
我尝试在两个版本(1.9.1和2.1.0)上运行gem,但收到相同的错误。
提前谢谢!
答案 0 :(得分:8)
这里有几件事情错了:
首先,gems已经以root身份安装,这意味着他们的代码库(以及他们安装生成的任何shell脚本或二进制命令)都是root用户,而不是当前用户。这是OP原始失败的原因 - 也就是说,可执行脚本无法解析这些宝石,因为它们是在不同用户的rvm环境下安装的。
其次,即使gems命令可访问,这也可能产生各种安全问题,因为这些文件属于root。潜在地,如果这些宝石中包含嵌入不良行为的代码(或恶意代码),则可能会对运行ruby进程的系统进行权限提升攻击。
基本上,TL; DR是你应该总是使用需要运行需要gems的ruby进程的用户的凭据来安装gem,并且该用户永远不应该是root
或具有超级用户权限到系统或文件系统。