我正在尝试在 Raspbian 上运行不同的 gem,但它们不起作用。我尝试了两个 gems:Jekyll 和 Lolcat。
我已经安装了两个 gem:
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,但收到相同的错误。
提前致谢!
最佳答案
这里有几处错误:
首先,gems 是以 root 身份安装的,这意味着它们的代码库(以及它们安装生成的任何 shell 脚本或二进制命令)是 root 的,而不是当前用户的。这是 OP 最初失败的原因 - 即,可执行脚本无法解析 gem,因为它们安装在不同用户的 rvm 环境下。
其次,即使可以访问 gems 命令,这也可能会产生各种安全问题,因为这些文件属于 root。潜在地,如果这些 gem 中嵌入了行为不良的代码(或恶意代码),则可能会对运行 ruby 进程的系统进行特权升级攻击。
基本上,TL;DR 是您应该始终使用需要运行需要 gems 的 ruby 进程的用户的凭据来安装 gems,并且该用户永远不应是 root
或拥有系统或文件系统的 super 用户权限。
关于Ruby Gems 无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21857571/