运行“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 为空。
sudo gem install rails
而不是 gem install rails
。
sudo
是一把上膛的枪,指向你的脚。在不了解它的作用以及它如何影响您的系统的情况下使用它就像闭着眼睛扣动扳机一样。您可能会在脚上打一个洞,也可能不会,但无论哪种方式,除非您知道如何消除损坏,否则您都不想冒险。使用 sudo
写入系统拥有的 Ruby,它在 Mac OS 上由 Apple 安装以供自己使用。我们可以搭载它,但改变错误的东西可能会破坏他们的代码。这就是为什么我们从源代码安装或使用其他东西来安装我们可以安全调整它的地方。
您还可以在本地环境中安装 gems(没有 sudo
)
gem install --user-install <gemname>
我建议您不要弄乱您的系统级配置,即使它是单用户计算机。
您可以通过使用 gem environment
查看 gempath 来检查 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)
与我建议在安装 gem 时不要使用 sudo
的所有其他帖子相反。
相反,我建议您安装 RVM 并开始与便携式 gem home 和不同版本的 Ruby 一起生活在一个屋檐下的幸福生活。
对于初学者,来自 the documentation:
RVM 是一个命令行工具,它允许我们轻松安装、管理和使用多个 ruby 环境和 gems 集。
使用 sudo
安装 gem 比仅使用 gem install
更糟糕的原因是因为它将 ALL USERS 的 gem 安装为 root
。如果您是唯一使用机器的人,这可能很好,但如果您不是,它可能会导致奇怪。
如果您决定要吹走所有的宝石并重新开始,那么以非 root 用户身份这样做会更容易、更安全。
如果您决定要使用 RVM
,那么使用 sudo
将导致各种奇怪,因为您通过 RVM
安装的每个 Ruby 版本都有自己的 GEM_HOME。
此外,如果您可以使您的开发环境尽可能接近您的生产环境,那就太好了,并且在生产中您很可能会以非 root 用户身份安装 gems。
更好的是,将 --user-install
放入您的 ~/.gemrc 文件中,这样您就不必每次都输入它
gem: --user-install
万一你
使用 sudo 安装 ruby gems
想在没有 sudo 的情况下安装 gems
不想安装 rvm/rbenv
将以下内容添加到您的 .bash_profile
:
export GEM_HOME=/Users/‹your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"
在终端或 source ~/.bash_profile
中打开一个新标签,您就可以开始了!
sudo gem install --no-user-install <gem-name>
将在全球范围内安装您的 gem,即它将可用于所有用户的上下文。
相关(对于捆绑器用户),如果您想要一个更轻的 RVM 替代方案,它将所有内容放在用户特定的知名目录中,我建议使用:
bundle install --path $HOME/.gem
如果你想将 gems 安装到同一个地方
gem install --user-install GEMNAME
将安装它们,.gem/ruby/RUBYVERSION
在您的主目录中。 (请参阅关于 --user-install
的关于此问题的其他评论。)
这将使 gem 对 gem list
可见,可通过 gem uninstall
卸载等,而无需 sudo
访问。由 gem 或 bundler 安装的可运行脚本可以通过添加
$HOME/.gem/ruby/RUBYVERSION/bin
到您的 $PATH
。如果您在执行 gem install --user-install
时未设置,gem
本身会告诉您这一点。
您可以使用以下命令将 gem 安装到 Rails 应用程序中的特定文件夹(例如 vendor/)中:
bundle install --path vendor
在 Mac 上安装 Ruby gem 是一个常见的困惑和挫折来源。不幸的是,大多数解决方案都是不完整的、过时的,并且提供了不好的建议。我很高兴这里接受的答案说不要使用 sudo
,你永远不需要这样做,特别是如果你不明白它的作用。虽然我几年前使用过 RVM,但我会在 2020 年推荐 chruby
。
这里的其他一些答案提供了安装 gems 的替代选项,但他们没有提到这些解决方案的局限性。缺少的是对各种选项的解释和比较,以及为什么您可能会选择其中一个。我试图在我的 definitive guide to installing Ruby gems on a Mac 中介绍最常见的场景。
rake install
并修复 sudo isse,我必须手动修补/Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb
添加--user-install
那里。找不到更好的解决方案,因为看起来rake install
不接受其他参数。