如何在无需使用sudo的情况下安装gems

36

在我所有的gem安装中,我都必须使用sudo命令吗?

sudo gem install rails

将有效,而只有

gem install rails

将无法工作。我该如何解决这个问题?

我已经安装了rvm -

murtaza@murtaza-dev:~$ which rvm
/home/murtaza/.rvm/bin/rvm

murtaza@murtaza-dev:~$ which gem
/home/murtaza/.rvm/rubies/ruby-1.9.3-p194/bin/gem

无论我使用gem进行哪些操作,都会收到此警告 -

murtaza@murtaza-dev:~$ gem
/home/murtaza/.rvm/rubies/ruby-1.9.3-p194/bin/gem:4: warning: Insecure world writable dir /opt in PATH, mode 040777

编辑

我已经重新安装了rvm,使用命令curl -L get.rvm.io | bash -s stable --auto(不用sudo)。

然而,当我尝试安装gem时,仍然会出现以下错误 -

murtaza@murtaza-dev:~$ gem install rails
/home/murtaza/.rvm/rubies/ruby-1.9.3-p194/bin/gem:4: warning: Insecure world writable dir /opt in PATH, mode 040777
ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied - /home/murtaza/.gem/specs

编辑

我尝试了对整个文件进行 chown 但仍然遇到错误 -

murtaza@murtaza-dev:~$ sudo chown murtaza.murtaza -R ~/.rvm/*


 murtaza@murtaza-dev:~$ gem install rails
    /home/murtaza/.rvm/rubies/ruby-1.9.3-p194/bin/gem:4: warning: Insecure world writable dir /opt in PATH, mode 040777
    ERROR:  While executing gem ... (Errno::EACCES)
        Permission denied - /home/murtaza/.gem/specs

2
请不要使用sudo安装gems,使用RVM或其他Ruby版本管理器! - Rodrigo Zurek
你的 chown 看起来有点奇怪。难道不应该是 murtaza:murtaza 吗? - Sergio Tulentsev
我已经没有更多的想法了。我从来没有遇到过这个问题。 - Sergio Tulentsev
1
可能是重复的问题:'sudo gem install' 或 'gem install' 和 gem 位置 - Nakilon
chmod 不是 chown。它告诉你有一个全局可写的目录。chown 是改变用户。'chmod 755 /some/directory' 可以让它安静下来。 - figtrap
显示剩余3条评论
7个回答

31

对整个.rvm.gem目录使用chown将其所有权归还给您的用户。您可能之前使用了sudo,导致权限出现问题。

sudo chown -R username:group ~/.rvm
sudo chown -R username:group ~/.gem

当然,将用户名更改为你的用户名,组更改为你的组


我该如何知道在“group”中填写什么? - fatfrog
2
在您的主文件夹中的任何目录上执行 ls -l 命令,您很可能会发现。 - Pedro Nascimento
在最坏的情况下,删除rvm并重新安装它。 - Pedro Nascimento
@jackerman09 我相信我刚刚重新加载了rvm,很抱歉,因为我已经有一段时间没有处理这个问题了。 - pixel 67
1
您还可以运行 sudo rvm fix-permissions username:groupname - Yvo
显示剩余5条评论

19

如果您没有使用sudo安装它们,Ruby就不知道它们被安装到哪里。我记不清它默认安装在哪里了,可能是像~/.gems这样的地方。无论如何,您可以通过设置GEM_HOME环境变量来告诉Ruby它们被安装在那里。

$ # assuming your gems are stored in ~/.gems
$ GEM_HOME="$HOME/.gems" ruby my_program.rb
如果这样可以用的话,那么你可能会将它放在你的~/.bashrc文件中(根据你的系统,可能有许多可能的文件)。

3
我会留下这个答案,因为它可能对其他人有帮助,但是由于你编辑了它并表示你正在使用rvm,所以它不再有意义了(rvm将为您管理此变量)。 - Joshua Cheek
3
如果在短暂的机器上(如Docker容器)使用系统安装的Ruby而不想使用rvm,那么GEM_HOME也是一种方法。 - gertas

16

对于Mac用户,这是我使用的方法...

  1. 将GEM_HOME添加到你的 .bash_profile

例如,运行 nano ~/.bash_profile 并添加 export GEM_HOME=$HOME/.gem,其中路径是你自己的Home文件夹。

  1. 将gem可执行文件添加到系统路径中

同样在 .bash_profile 中,添加 export PATH="$GEM_HOME/bin:$PATH"

来源: http://michaelehead.com/2016/02/06/installing-gems-without-sudo.html


与@Hola Soy Edu Feliz Navidad提到的gem install package --install-dir $GEM_HOME结合使用。 - conceptdeluxe
当出现 "can't find gem ... - Gem::GemNotFoundException" 错误时,也要在 .bash_profile 中设置 GEM_PATH:export GEM_PATH="$GEM_HOME:$GEM_PATH" - conceptdeluxe
适用于我(Ubuntu) - point618

7

您应该安装Ruby版本管理器。它将已安装的Rubies和Gems存储在您的主目录中,因此现在您不必使用sudo来安装Gems。除此之外,它还有许多其他功能。 :)


请看我的编辑,rvm路径显示在我的主文件夹下。它仍然是系统范围内的吗? - murtaza52
1
在 https://rvm.io/rvm/install/ 上有三种安装模式,你选择了哪一种? - Sergio Tulentsev
你在安装之前移除了 RVM 吗? - Sergio Tulentsev
@murtaza52:是的,那应该足够了。但也许你的环境文件中还有一些东西。请查看这个答案~/.rvm~/.rvm/.gem/specs的权限是什么? - Sergio Tulentsev
让我们在聊天中继续这个讨论 - murtaza52
显示剩余7条评论

2
我是这样解决我的问题的:(我使用的是Ubuntu 17.10)
打开终端并输入:
echo "gem: --user-install" >> ~/.gemrc

然后在.bashrc文件中添加Ruby的bin路径

export PATH="$PATH:$HOME/.gem/ruby/x.x.x/bin"

2

MacOS

brew install ruby 

编辑~/.zshrc文件以配置zsh(对于Bash可能是类似于~/.bash_aliases的东西)

# By default, binaries installed by gem will be placed into:
# /usr/local/lib/ruby/gems/2.6.0/bin
export GEM_HOME="/usr/local/lib/ruby/gems/"
export PATH="$GEM_HOME/bin:$PATH"

1
尝试使用gem install package --install-dir $HOME/.gem进行安装。
不要忘记按照之前提到的设置路径export PATH="$PATH:$HOME/.gem/bin"
你需要考虑的一些事情是更改路径顺序,例如export PATH="$HOME/.gem/bin:$PATH"。如果你正在尝试在OS X系统中将rails安装到本地目录中,但已经有一个可执行文件,则可能会发生这种情况。在这种情况下,如果您不更改路径顺序,则还将收到以下输出:

Rails当前未安装在此系统上。要获取最新版本,请键入:

$ sudo gem install rails

然后可以重新运行“rails”命令。

并设置变量GEM_HOME,如export GEM_HOME="$HOME/.gems"

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