【问题标题】:'sudo gem install' or 'gem install' and gem locations'sudo gem install' 或 'gem install' 和 gem 位置
【发布时间】:2011-01-08 07:27:14
【问题描述】:

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

将 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"

~/.bash_profile 为空。

【问题讨论】:

  • 我认为对于我们这些必须使用需要 root 权限的 gem 的人来说,这是一个有效的问题。
  • 相关:stackoverflow.com/questions/21141584/…。我使用 rbenv 管理 Ruby 版本并遇到了问题,因为我使用了 sudo gem install rails 而不是 gem install rails
  • “我认为对于我们这些必须使用需要 root 权限的 gem 的人来说,这是一个有效的问题。”我认为任何需要 root 权限的 gem,无论是安装还是运行,都是高度可疑的。 Gems 应该能够在沙箱中运行,并在用户权限下运行。
  • sudo 是一把上膛的枪,指向你的脚。在不了解它的作用以及它如何影响您的系统的情况下使用它就像闭着眼睛扣动扳机一样。您可能会在脚上打一个洞,也可能不会,但无论哪种方式,您都不想冒险,除非您知道如何消除损坏。使用sudo 写入系统拥有的Ruby,在Mac OS 上,它是由Apple 安装以供自己使用的。我们可以搭载它,但改变错误的东西可能会破坏他们的代码。这就是为什么我们从源代码安装或使用其他东西来安装我们可以安全调整它的地方。

标签: ruby-on-rails ruby macos rubygems


【解决方案1】:

与我建议在安装 gems 时不要使用 sudo 的所有其他帖子相反。

相反,我建议您安装 RVM 并开始与便携式 gem 家园和不同版本的 Ruby 一起生活在一个屋檐下的幸福生活。

对于外行,来自the documentation

RVM 是一个命令行工具,它允许我们轻松安装、管理和使用多个 ruby​​ 环境和 gems 集。

使用sudo 安装gem 比使用gem install 更糟糕的原因是因为它将所有用户 的gem 安装为root。如果你是唯一使用机器的人,这可能没问题,但如果你不是,这可能会导致奇怪。

如果您决定放弃所有的宝石并重新开始,那么以非 root 用户身份这样做会更容易、更安全。

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

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

【讨论】:

  • +1 表示 rvm 建议,但 -1 表示对仅使用 sudo 的替代可能性的令人困惑的谴责
  • 好的,但你所有的理由都归结为“因为 RVM 太棒了”,而不是因为使用 sudo 特别有害。您唯一不希望的情况是您在共享计算机上的特定情况。如果你想推荐 rvm 就这样做。无需诉诸 FUDD。
  • 我尽量不传播 FUD,并尝试给出非 RVM 的原因,如果看起来是这样,我深表歉意。
  • RVM 是一个不错的选择。但是你应该尝试一个更好的,RBENV。它比 RVM 的侵入性更小。
  • @HontváriJózsefLevente 很难在评论中解决您的所有问题,但简而言之,您希望您的开发环境尽可能接近生产环境。如果您正在开发两个应用程序,其中一个使用 ruby​​ 2.1,另一个使用 1.9,那么您需要确保您的本地环境使用正确的版本。这就是 RVM 或 RBENV 为您所做的。使用它的原因与使用任何沙箱环境的原因相同,但在这种情况下,主要好处是隔离。我希望这会有所帮助!
【解决方案2】:

您也可以使用

在本地环境中安装gems(不带sudo
gem install --user-install <gemname>

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

您可以通过gem environment 查看 gempaths 来检查 gem 的去向。就我而言,它是“~/.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

【讨论】:

  • +1 表示此选项,而不是上面的“另一个配置工具”解决方案,RBENV / RVM。
  • 我正在创建一个 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 不接受额外的参数。
  • 我对第一个命令感到非常兴奋。我一直在尝试安装 gems 并遇到问题,因为我没有 sudo 权限。该命令有效!!!!
【解决方案3】:

更好的是,将--user-install 放入您的 ~/.gemrc 文件中,这样您就不必每次都输入它

gem: --user-install

【讨论】:

    【解决方案4】:

    如果你

    • 使用 sudo 安装 ruby​​ gems
    • 想在没有 sudo 的情况下安装 gem
    • 不想安装 rvm/rbenv

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

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

    在终端或source ~/.bash_profile 中打开一个新选项卡,一切顺利!

    【讨论】:

    • 对于不使用 Ruby、Rails、Rake 以及任何其他 Ruby 开发人员使用/想要使用的人来说,这个解决方案比使用 rvm 容易得多。我真的不在乎有不同的 ruby​​ 版本,我只想运行一些作为 gem 分发的 shell 程序。谢谢!
    【解决方案5】:
    sudo gem install --no-user-install <gem-name>
    

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

    【讨论】:

    • 它还可以覆盖供应商安装的 gem,该操作系统可能希望将其设置为特定版本。这可能会破坏依赖它的代码。
    • ...或者它可以安装供应商不提供的 gem,并以使其对系统上的所有用户可用的方式进行。有点令人恼火的是,所有答案都假设读者是开发人员和系统管理员,实际上确实想让所有用户都可以使用特定版本的 gem。 :D
    【解决方案6】:

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

    bundle install --path $HOME/.gem
    

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

    gem install --user-install GEMNAME
    

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

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

    $HOME/.gem/ruby/RUBYVERSION/bin
    

    到您的$PATHgem 本身会告诉你这一点,如果你在 gem install --user-install 时没有设置它。

    【讨论】:

    • 谢谢。是否可以让捆绑程序默认执行此操作? (如果是这样,这是个好主意吗?)
    【解决方案7】:

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

    bundle install --path vendor
    

    【讨论】:

    • 这个。这些天来,唯一需要 sudo 来安装软件的程序就是你的包管理器。
    【解决方案8】:

    在 Mac 上安装 Ruby gem 是一个常见的困惑和挫折来源。不幸的是,大多数解决方案都是不完整的、过时的,并且提供了不好的建议。我很高兴这里接受的答案说不要使用sudo,你永远不需要这样做,特别是如果你不明白它的作用。虽然我几年前使用 RVM,但我会在 2020 年推荐 chruby

    这里的一些其他答案提供了安装 gems 的替代选项,但他们没有提到这些解决方案的局限性。缺少的是对各种选项的解释和比较,以及为什么您可能会选择其中一个。我试图涵盖最常见的场景 在我的definitive guide to installing Ruby gems on a Mac

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 2017-01-27
      • 2016-02-25
      • 2011-07-09
      • 2011-06-01
      • 2013-12-26
      • 2021-01-12
      相关资源
      最近更新 更多