gem install 权限问题

95
qichunren@zhaobak:~> gem install hpricot
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8 directory.

当前登录用户是qichunren,qichunren用户具有.gem目录的写入权限。我想知道为什么gem不先安装文件到我的主目录下的.gem目录中?为什么我的gem常规安装要先将文件安装到/opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8中?

5个回答

195

尝试将GEM_HOMEGEM_PATH设置为~/.gem

对于当前的终端会话,只需输入:

export GEM_HOME=~/.gem
export GEM_PATH=~/.gem

如果您希望在每次打开终端时都设置这些变量,请将上述命令添加到您的~/.bashrc文件中。

对于更全面的设置自定义ruby环境的解决方案,请参阅Site5KB教程中的此教程,其中描述了使用.gemrc文件的方法。


13
这就是正确答案。如果不必要,不要去使用sudo安装东西。请勿滥用sudo命令。 - Jesse O'Brien
答案中的链接似乎已更改。不过,此指南中的第一步骤对我来说也实现了同样的效果:http://kb.site5.com/ruby-on-rails/how-to-setup-a-custom-rubygems-environment - Mike S
@MikeSlutsky 感谢您指出这一点。将来,如果您发现一个损坏的链接(或链接已更改且不再相关),请随时提交“编辑”建议,如果您认为有一个不错的替代品。 - user229044
@meagar,我更新了@Mike-Slutsky提供的链接,但注意到这是关于.gemrc配置的文档。对于Ruby gem新手来说,这可能有些令人生畏,而我理解你的解决方案要简单得多,所以我添加了更简单的方法。这个解决方案对我有效,但作为一个Ruby新手,请确认我的更改是否符合你的意图。 - David LeBauer
这真的很有帮助。不要简单地使用sudo。谢谢。 - Jerry Liu
2
请记得将您的GEM_PATH添加到全局PATH中。这是我的做法:PATH=$HOME/.gems/bin:$HOME/bin:$PATH GEM_HOME=$HOME/.gems GEM_PATH=$HOME/.gems:/var/lib/gems/2.1.0:/usr/lib/ruby/gems/2.1.0 export PATH GEM_HOME GEM_PATH - Spone

54

对于系统范围的 Ruby 安装,请以 root 用户身份登录。例如:

$ sudo gem install hpricot

然而,在许多情况下(包括开发中),现代方法是使用一个工具来让你能够轻松地安装和使用 Ruby,就像一个普通用户一样。这样可以避免你成为root。有几个这样的工具,我使用的是RVM

# install rvm into your ~
$ \curl -sSL https://get.rvm.io | bash -s stable

# install latest version of ruby into your ~
$ rvm install ruby

# installs a gem into your ~
$ gem install $SOME_GEM_NAME

41
不要使用sudo安装,因为这会将它们安装为root用户,而在使用普通用户时将无法访问它们。请使用RVM和gemsets。 - rxgx
4
请安装hpricot宝石:rvm gem install hpricot - AJP
5
你可能希望删除这个答案。你将保留积分,并且能够让其他人免去很多麻烦。 - Olhovsky

13

我在我的共享服务器上通过1and1托管时遇到了这个错误。我的解决方案是添加--user-install选项,它只为您登录的用户安装(在共享服务器环境中这就足够了)例如;安装sass。

gem install sass --user-install

有趣的是,尽管我已经指定了“--user-install”,但仍然出现了此错误。 - sschuberth
我在为在Jenkins上安装Gem而苦恼,这篇文章帮助了我...谢谢 - Leena

4

如果您使用rbenv,并且遇到此问题,则需要将以下内容添加到您的.bash_profile文件中:

export RBENV_ROOT="$HOME/.rbenv"

if [ -d $RBENV_ROOT ]; then
  export PATH="$RBENV_ROOT/bin:$PATH"
  eval "$(rbenv init -)"
fi

0
重新安装 Ruby 解决了我的问题。
brew install ruby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接