'sudo gem install'或'gem install'和gem位置


140

运行' sudo gem list --local'和' gem list --local'给我不同的结果。我的宝石路径设置为我的主文件夹,并且仅包含来自' gem list --local' 的宝石。

在计算机上的不同目录中安装gems可能不是一件好事,所以我应该对gem路径进行不同的设置,并且sudo在安装某些东西时应该始终使用吗?

my ~/.profile
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

〜/ .bash_profile为空。


1
我认为对于那些必须使用需要root特权的gem的人来说,这是一个有效的问题。
凯利

相关:stackoverflow.com/questions/21141584/…。我使用rbenv来管理Ruby版本,但是遇到了问题,因为我使用sudo gem install rails而不是 gem install rails
丹尼斯

3
“对于那些必须使用需要root特权的gem的人来说,这是一个有效的问题。” 我认为任何需要root特权(无论是安装还是运行)的gem都是高度可疑的。宝石应该能够在沙箱中运行并在用户许可下运行。
Tin Man

1
sudo是指向你的脚的装载枪。在不了解其功能以及其如何影响系统的情况下使用它就像闭上眼睛拉动扳机。您可能会在脚上开一个洞,但可能不会,但无论如何,除非您知道如何消除这种伤害,否则您都不想冒险。使用sudo写入系统拥有的Ruby,该Ruby在Mac OS上由Apple安装供自己使用。我们可以搭载它,但是更改错误的内容可能会破坏其代码。这就是为什么我们从源代码安装或使用其他东西可以安全地对其进行调整的原因。
Tin Man

Answers:


146

与其他所有建议相反,我建议sudo在安装gem时不要使用。

相反,我建议您安装RVM并开始生活在一个屋顶下的便携式宝石房屋和其他版本的Ruby,从而过上幸福的生活。

对于初学者,可以从文档中获取

RVM是一个命令行工具,使我们可以轻松地安装,管理和使用多个红宝石环境和宝石组。

之所以与安装宝石sudo不仅仅是糟糕的gem install是,因为它安装了宝石ALL USERS作为root。如果您是唯一使用此机器的人,这可能会很好,但如果不是,则可能会导致异常。

如果您决定要炸掉所有的宝石然后重新开始,那么以非root用户的身份进行操作会更容易,更安全。

如果您决定要使用,RVM则使用sudo会引起各种奇怪的情况,因为您安装的每个Ruby版本RVM都有其自己的GEM_HOME。

另外,如果您可以使开发环境尽可能接近生产环境,那也很好,并且在生产中,您很有可能会以非root用户身份安装gem。


12
rvm建议+1,但对仅使用sudo的另一种可能性的困惑谴责-1
tfwright 2010年

10
好的,但是您所有的原因都归结为“因为RVM非常好”,并不是因为使用sudo尤其有害。唯一不希望的是在共享计算机上的特定情况下。如果您要推荐rvm,请执行此操作。无需诉诸FUDD。
tfwright

6
我尝试不散布FUD,并尝试给出非RVM的原因,对于这种情况,我深表歉意。
jonnii 2010年

9
RVM是一个不错的选择。但是您应该尝试更好的产品,RBENV。它比RVM更具侵入性。
安德列斯(Andres)2012年

4
@HontváriJózsefLevente很难在评论中解决您的所有问题,但是简短的是,您希望您的开发环境尽可能接近生产环境。如果您正在使用两个应用程序,其中一个使用ruby 2.1,另一个使用用户1.9,则需要确保您的本地环境使用正确的版本。这就是RVM或RBENV为您所做的。您将使用它的原因与使用任何沙盒环境的原因相同,但是在这种情况下,主要好处是隔离。我希望这有帮助!
jonnii 2014年

128

您还可以使用以下命令在本地环境中安装gems(不带sudo):

gem install --user-install <gemname>

我建议您不要将系统级配置弄乱,即使它是单用户计算机也是如此。

您可以通过查看宝石路径来检查宝石的位置gem environment。就我而言,它是“〜/ .gem / ruby​​ / 1.8”。

如果您需要将本地安装中的某些二进制文件添加到您的路径中,则可以向bashrc中添加一些内容,例如:

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

(来自http://guides.rubygems.org/faqs/#user-install


23
对此选项+1,而不是上面的“其他配置工具”解决方案RBENV / RVM。
jjpe 2014年

我正在创建一个gem,根据我必须做的手册rake install并修复sudo isse,我不得不手动在其中/Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb添加补丁--user-install。找不到更好的解决方案,因为看起来好像rake install不接受其他参数。
Nakilon 2015年

我对第一条命令感到非常兴奋。我一直在尝试安装gems并遇到问题,因为我没有sudo特权。该命令有效!!!
Caleb Kleveter 2015年

34

更好的是,放入--user-install〜/ .gemrc文件,这样您不必每次都键入它

gem: --user-install

13

万一你

  • 用sudo安装红宝石宝石
  • 想要安装没有sudo的gem
  • 不想安装rvm / rbenv

将以下内容添加到您的.bash_profile

export GEM_HOME=/Users/your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"

在Terminal OR中打开一个新标签,source ~/.bash_profile一切顺利!


8
对于不使用Ruby,Rails,Rake以及其他任何Ruby Devs使用/想要使用THIS解决方案的人来说,它比使用rvm容易得多。我真的不在乎拥有不同的ruby版本,我只想运行一些以gem形式分发的shell程序。谢谢!
凯文·金贝尔

9

相关(适用于捆绑用户),如果您想使用更轻巧的RVM替代方案,将所有内容都放在用户特定的知名目录中,建议使用:

bundle install --path $HOME/.gem

如果您想将gems安装到同一位置

gem install --user-install GEMNAME

将它们安装.gem/ruby/RUBYVERSION在您的homedir中。(请参阅有关此问题的其他评论--user-install。)

这将使宝石可见gem list,可以通过gem uninstall等方式卸载,而无需sudo访问。通过gem或bundler安装的可运行脚本可以通过添加到您的路径中

$HOME/.gem/ruby/RUBYVERSION/bin

给你$PATHgem如果设置时没有设置,它本身会告诉您gem install --user-install


谢谢你 是否可以使捆绑程序默认执行此操作?(如果是这样,这将是一个好主意吗?)
joshtch

6
sudo gem install --no-user-install <gem-name>

将在全球范围内安装您的gem ,即它将可用于所有用户的上下文。


1
它还可以覆盖操作系统可能期望将其设置为特定版本的供应商安装的gem。这可能会破坏依赖它的代码。
Tin Man

1
...或者它可以安装供应商不提供的gem,并以某种方式将其提供给系统上的所有用户使用。令人不安的是,所有答案都假设读者是一名开发人员/系统管理员,实际上他确实想为所有用户提供特定版本的gem。:D
dannysauer

1

您可以使用以下命令将gems安装到Rails应用程序中的特定文件夹(例如vendor /)中:

bundle install --path vendor

这个。如今,唯一需要sudo安装软件的程序就是软件包管理器。
tjbp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.