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

rap*_*tle 134 ruby macos rubygems ruby-on-rails

跑' sudo gem list --local'和' gem list --local'给我不同的结果.我的宝石路径设置为我的主文件夹,只包含来自' gem list --local' 的宝石.

将gem安装在我的计算机上的不同目录中可能并不好,所以我应该以不同的方式设置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"
Run Code Online (Sandbox Code Playgroud)

〜/ .bash_profile是空的.

jon*_*nii 141

与我建议sudo在安装宝石时不使用的所有其他帖子相反.

相反,我建议您安装RVM并开始幸福的生活与便携式宝石住宅和不同版本的Ruby都生活在一个屋檐下.

对于没有经验的人,从文档中:

RVM是一个命令行工具,它允许我们轻松地安装,管理和使用多个ruby环境和宝石集.

之所以与安装宝石sudo不仅仅是糟糕的gem install是,因为它安装了宝石ALL USERS作为root.如果你是唯一一个使用这台机器的人,这可能没问题,但如果你不是,那么它可能会导致奇怪.

如果您决定要吹走所有宝石并重新开始,那么以非root用户身份更容易,更安全.

如果你决定要使用RVM那么使用sudo将导致各种奇怪,因为你安装的每个Ruby版本RVM都有自己的GEM_HOME.

此外,如果您可以使您的开发环境尽可能接近您的生产环境,那就太好了,而且在生产环境中,您很可能将gem作为非root用户安装.

  • 对于rvm提示+1,但是对于仅仅使用sudo的替代可能性的混乱谴责为-1 (12认同)
  • 好吧,但你所有的理由归结为"因为RVM太棒了"并不是因为使用sudo特别有害.您不想要的唯一一次是在共享计算机上的特定情况.如果你想推荐rvm就这样做.无需求助于FUDD. (10认同)
  • RVM是一个不错的选择.但你应该尝试一个更好的,RBENV.它比RVM更少侵入. (8认同)
  • 我试着不传播FUD,我试图给出非RVM的原因,如果这样的话,我道歉. (5认同)
  • @HontváriJózsefLevente很难在评论中解决您的所有问题,但缺点是您希望您的开发环境尽可能接近生产.如果您正在使用两个应用程序,其中一个使用ruby 2.1,另一个使用1.9,那么您需要确保您的本地环境使用的是正确的版本.这就是RVM或RBENV为您所做的事情.您将使用它的原因与使用任何沙盒环境的原因相同,但在这种情况下的主要好处是隔离.我希望这有帮助! (4认同)
  • 作为一个对Ruby不太了解的人,我想念这个答案的每个陈述背后的原因.为什么我应该同时使用不同版本的Ruby?为什么为所有用户安装程序是一个问题.*nix中的标准做法是以root用户身份安装,但以受限用户身份运行它们.为什么这在Ruby世界中有所不同?你谈到什么样的怪异?等等. (2认同)

Nil*_*ils 118

您还可以在本地环境中安装gems(不带sudo)

gem install --user-install <gemname>
Run Code Online (Sandbox Code Playgroud)

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

您可以通过查看gempath来查看宝石的去向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
Run Code Online (Sandbox Code Playgroud)

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

  • 此选项为+1,而不是上面的"又一个配置工具"解决方案,RBENV/RVM. (21认同)

小智 33

更好的是,--user-install输入你的〜/ .gemrc文件,这样你就不必每次都输入它

gem: --user-install
Run Code Online (Sandbox Code Playgroud)


Dav*_*mon 11

如果你

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

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

export GEM_HOME=/Users/‹your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

在Terminal OR打开一个新标签,source ~/.bash_profile你很高兴!

  • 对于不使用Ruby,Rails,Rake以及Ruby Devs使用/想要使用的其他任何人来说,这个解决方案比使用rvm容易得多.我真的不关心有不同的ruby版本我只想运行一些作为gems分发的shell程序.谢谢! (5认同)

Tod*_*ing 8

相关(对于捆绑用户),如果您想要一个更轻松的替代RVM,将所有内容放在用户特定的知名目录中,我建议使用:

bundle install --path $HOME/.gem
Run Code Online (Sandbox Code Playgroud)

如果你想将宝石安装到同一个地方

gem install --user-install GEMNAME
Run Code Online (Sandbox Code Playgroud)

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

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

$HOME/.gem/ruby/RUBYVERSION/bin
Run Code Online (Sandbox Code Playgroud)

到你的$PATH.gem当你这样做时,它会告诉你这个问题gem install --user-install.


Tas*_*nos 6

sudo gem install --no-user-install <gem-name>
Run Code Online (Sandbox Code Playgroud)

全局安装您的gem ,即它将可用于所有用户的上下文.

  • ...或者它可以安装供应商不提供的 gem,并以使其对系统上的所有用户都可用的方式进行安装。稍微令人恼火的是,所有答案都假设读者是 dev v/sa 系统管理员,他实际上_确实_想让所有用户都可以使用特定版本的 gem。:D (2认同)