我试图在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...
Run Code Online (Sandbox Code Playgroud)
这些是我收到的错误.
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>'
Run Code Online (Sandbox Code Playgroud)
我被建议使用RVM重新安装ruby.我做了,当我跑去rvm list
看我的红宝石版本时,我得到以下内容:
pi@moon ~ $ rvm list
rvm rubies
=> ruby-1.9.1-p431 [ armv6l ]
* ruby-2.1.0 [ armv6l ]
Run Code Online (Sandbox Code Playgroud)
我尝试在两个版本(1.9.1和2.1.0)上运行gem,但收到相同的错误.
先感谢您!
这里有几件事是错的:
首先,gem已经以root身份安装,这意味着他们的代码库(以及他们安装生成的任何shell脚本或二进制命令)都是root用户,而不是当前用户.这是OP最初失败的原因 - 也就是说,可执行脚本无法解析宝石,因为它们安装在不同用户的rvm环境下.
其次,即使有gems命令可访问,这可能会产生各种安全问题,因为文件属于root.潜在地,如果这些宝石包含嵌入其中的行为不当的代码(或恶意代码),则可能对运行ruby进程的系统进行权限提升攻击.
基本上,TL; DR是您应该始终使用需要运行需要gem的ruby进程的用户的凭据来安装gem,并且该用户永远不应该root
拥有或拥有系统或文件系统的超级用户权限.
归档时间: |
|
查看次数: |
2571 次 |
最近记录: |