![](/img/trans.png)
[英]How to require a user-installed gem in ruby when system-wide gem with higher version is also available?
[英]How do I run a user-installed Ruby gem as a different user?
我设置了一个钩子,使其可以像我的普通用户一样正常运行,并使用gem install --user-install
在该用户下安装了必需的gem。 现在,我想以其他用户身份运行该挂钩,但是当我尝试使用该挂钩时,ruby无法找到已安装的gem:
$ /home/user/.gem/ruby/1.9.1/bin/jekyll
/usr/lib/ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find jekyll (>= 0) amongst [rack-1.5.2, rack-protection-1.5.0, ruby-openid-2.1.8, sinatra-1.0, tilt-1.3.6] (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:1210:in `gem'
from /home/user/.gem/ruby/1.9.1/bin/jekyll:18:in `<main>'
您需要让Ruby知道其gem的安装位置。 环境GEM_HOME
对此进行控制,因此您可以执行以下操作:
export GEM_HOME=/home/user/.gem/ruby/1.9.1
$GEM_HOME/bin/jekyll help
与其尝试为一个用户安装并在另一个用户下运行,不如为所有用户安装。
在共享环境主机上,如果您具有“ sudo”功能,或者您是系统管理员,则可以执行常规的sudo gem install ...
以针对每个人进行全局安装。
普通的Ruby安装就是这样。
通常,作为开发人员,我们希望在自己的个人沙箱中运行Ruby,因此我们可以更改和安装Ruby版本并加载不同版本的gem,而又不会影响其上的其他版本。
一旦代码准备好进行测试和生产,我们就希望在共享环境中使用它,因此我们在所有应用程序之间仅共享一个Ruby安装,这些应用程序通常以同一用户身份运行。 即使这些应用程序以不同的用户身份运行,他们仍然使用相同的Ruby。
他们通过默认环境和路径执行此操作。 如果这样做没有意义,请与系统管理员联系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.