无法在 OS X "El Capitan" 上安装 gems

Can't install gems on OS X "El Capitan"

我无法在 El Capitan Beta 5 上安装和 运行 fakes3 gem。

我试过了:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

然后我尝试用 cocoapods 的方式来做。它适用于 cocoapods 但不适用于 fakes3。

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

免责声明: @theTinMan 和其他 Ruby 开发人员经常指出在安装 gem 时不要使用 sudo 并指向事物喜欢 RVM。在进行 Ruby 开发时,这是绝对正确的。继续使用它。

然而,我们中的许多人只想要一些恰好作为 gem 分发的二进制文件(例如 fakes3cocoapodsxcpretty …)。我绝对不想费心去管理一个单独的 ruby。以下是您更快的选择:

选项 1:继续使用 sudo

如果您希望全局安装这些工具,使用 sudo 可能没问题。

问题是这些二进制文件安装到 /usr/bin 中,off-limits since El Capitan. However, you can install them into /usr/local/bin instead. That's where Homebrew install its stuff, so it probably 已经存在。

sudo gem install fakes3 -n/usr/local/bin

Gems 将被安装到 /usr/local/bin 中,并且您系统上的每个用户都可以使用它们,如果它在他们的 PATH.

选项 2:在您的主目录中安装(不使用 sudo)

以下将在 ~/.gem 中安装 gems 并将二进制文件放入 ~/bin(然后您应该将其添加到 PATH)。

gem install fakes3 --user-install -n~/bin

设为默认值

无论哪种方式,您都可以将这些参数添加到您的 ~/.gemrc 中,这样您就不必记住它们了:

gem: -n/usr/local/bin

echo "gem: -n/usr/local/bin" >> ~/.gemrc

gem: --user-install -n~/bin

echo "gem: --user-install -n~/bin" >> ~/.gemrc

(提示: 您也可以输入 --no-document 以跳过生成 Ruby 开发人员文档。)

您必须将 Xcode 更新到最新版本 (v7.0.1),一切都会正常进行。

如果在安装最新的 Xcode 后仍然无法使用,请尝试以这种方式安装 gem:

sudo gem install -n /usr/local/bin GEM_NAME_HERE

例如:

sudo gem install -n /usr/local/bin fakes3
sudo gem install -n /usr/local/bin compass
sudo gem install -n /usr/local/bin susy

就我而言,我不得不使用 Brew 重新安装 Ruby。这似乎已经解决了问题,因为我可以再次安装 gems。

brew install ruby

在此之后,您需要注销并重新登录,可以图形方式登录,也可以只重新启动终端。

这是我用过的解决方案:

注意:这个修复是针对指南针的,因为我在另一个 SO 问题上写了它,但是我使用了相同的过程来恢复所有终端进程的功能,显然你安装的 gem 是不同的,但是过程是一样的。

我遇到了同样的问题。这是由于 Apple 实施了系统完整性保护 (SIP)。你必须先禁用那个...

以恢复模式重启:

重新启动并按住 Command + R 直到看到苹果徽标。

一旦启动 select Utilities > Terminal 从顶部栏。

类型:csrutil disable

然后输入:reboot

重启后

打开终端备份并输入命令:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

需要修复失败的单个 gem,因此对每个 gem 执行以下操作:

在我的机器上,这是第一个不起作用的依赖项,所以我列出了它:

sudo gem pristine ffi --version 1.9.3

继续浏览需要修复的宝石列表。总而言之,您需要大约 10 分钟的时间来修复它,但您将拥有指南针工作的终端命令。

Screenshot

看起来升级到 OS X El Capitain 时,/usr/local 目录以多种方式修改:

  1. 用户权限被重置(这也是使用 Homebrew 的人的问题)
  2. 二进制文件和 symlinks 可能已被删除或更改

[编辑] 还有一个初步的事情要做:升级 Xcode...

#1 的解决方案:

$ sudo chown -R $(whoami):admin /usr/local

这将修复 /usr/local 目录的权限,这将有助于 gem installbrew install|link|... 命令正常工作。

#2 的解决方案:

Ruby 基于问题

确保您已修复 /usr/local 目录的权限(参见上面的 #1)

首先尝试使用 :

重新安装您的 gem
sudo gem install <gemname>

请注意,它将安装指定 gem 的最新版本。

如果您不想面对向后兼容性问题,我建议您首先确定要获取 gem 的哪个版本,然后使用 -v version 重新安装它。请参阅下面的示例以确保系统不会获得新版本的 capistrano。

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

基于 Brew 的问题

更新 brew 并升级您的配方

$ brew update
$ brew upgrade

您可能还需要手动重新link其中一些

$ brew link <formula>

我不喜欢用 sudo 安装东西。 一旦开始使用 sudo 就停不下来了..

尝试授予 Gems 目录权限。

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
sudo gem install -n /usr/local/bin cocoapods

试试这个。它肯定会起作用。

重新安装 RVM 对我有用,但之后我不得不重新安装所有的 gem:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload

那是因为 OS X "El Capitan" 的新安全功能。 尝试添加 --user-install 而不是使用 sudo:

$ gem install *** --user-install

例如,如果你想安装 fake3,只需使用:

$ gem install fake3 --user-install
sudo chown -R $(whoami):admin /usr/local

这将归还权限(Homebrew 在此处安装 ruby)

我 运行 安装 El Capitan 后遇到同样的问题,我尝试将 sass 和指南针安装到 symfony 项目中,以下命令返回以下错误:

$ sudo gem 安装指南针

错误:安装指南针时出错: 错误:无法构建 gem 本机扩展。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

正在检查 ffi.h.../System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do': 编译器生成可执行文件失败。 (运行时错误)

所以我随后尝试安装 sass: $ sudo gem 安装 sass

收到相同的错误消息,经过一些谷歌搜索后,我设法使用以下命令安装了 sass:

$ sudo gem install -n /usr/local/bin sass

以上对我安装 sass 有效,但对安装指南针无效。我读到有人在某个地方打开了 xcode 的实例,然后再次关闭它,然后成功地 运行 相同的命令,之后对他们有用。 我试图打开 xcode,但系统提示我安装的 xcode 版本与 El Capitan 不兼容。 因此,我随后从应用商店更新了 xcode,重新 运行 以下命令,这次 运行 成功:

$ sudo gem install -n /usr/local/bin 指南针

然后我能够 运行 $ compass init

现在我的 gem 都在工作了,可以继续构建一些可爱的 sass 东西 :)

如果您尝试安装的 gem 需要 xml 库,那么试试这个:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

具体来说,我 运行 在 OS X El Capitan

上安装 nokogiri gem v 1.6.8 时遇到问题

这终于对我有用了:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

要确保安装了 libxml2 和 libxslt,您可以执行以下操作:

brew install libxml2 libxslt
brew install libiconv

然后检查以确保您已安装 xcode 命令行工具:

xcode-select --install 

应该return这个错误:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

我不得不 rm -rf ./vendor 然后 运行 再 bundle install

如前所述,问题来自 Mac OSX 的安全功能,因为 "El Capitan"。

使用默认系统 Ruby,安装过程发生在用户不可用的 /Library/Ruby/Gems/2.0.0 目录中并给出错误。

您可以使用命令

查看您的 Ruby 环境参数
$ gem env

有一个安装目录和一个用户安装目录。要使用用户安装目录而不是默认安装目录,您可以使用 --user-install 参数代替使用 sudo,这绝不是推荐的做法。

$ gem install myGemName --user-install

过程中应该不会再有任何配股了。然后将 gem 安装在用户目录中:~/.gem/Ruby/2.0.0/bin

但是要使安装的 gem 可用,该目录应该在您的路径中可用。根据 Ruby’s faq,您可以将以下行添加到您的 ~/.bash_profile~/.bashrc

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

然后关闭并重新加载您的终端或重新加载您的 .bash_profile.bashrc (. ~/.bash_profile)

您可能有两个选择:

  1. 如果您已经安装了 ruby 和 rails,您可以先尝试 运行ning 命令:
    rvm fix-permissions 
    
  2. 您可以完全卸载 ruby,然后在您的 ~ 目录(即主目录)中重新安装。

如果您使用的是自制软件,则命令为:

brew uninstall ruby

对于 rails 在没有自制程序的情况下卸载命令是:

rvm remove

这应该通过 运行ning 命令重新安装最新的 ruby:

curl -L https://get.rvm.io | bash -s stable --rails<br>

Mac 出厂安装了 2.6.3,这是必需的...如果没有 运行 此命令:

rvm install "ruby-2.6.3"

然后:

gem install rails

最后你会收到一些错误消息,说你必须添加一些其他的包...
只要确保您在安装时位于主 ~ 目录中,这样权限就不会成为问题,但以防万一...

我又是运行:

rvm fix-permissions

和:

rvm debug

告诉我必须下载 yarn,我没有保存它的输出。基本上,如果它与我的 OS.

有关,我会按照提示告诉我的去做。

-D