无法在 OS X“El Capitan”上安装 gem

Posted

技术标签:

【中文标题】无法在 OS X“El Capitan”上安装 gem【英文标题】:Can't install gems on OS X "El Capitan" 【发布时间】:2015-11-05 12:29:05 【问题描述】:

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

我试过了:

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

然后我尝试以 cocoapods 的方式进行操作。它适用于 cocoapods,但不适用于假货3。

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.

【问题讨论】:

不要使用sudo 来安装Ruby,或者更换gem。而是使用rbenv 或RVM 来安装和管理Ruby。阅读并按照各自网站上的说明进行操作。而且,无论哪种情况,安装后都不要使用sudo,除非您了解发生了什么变化以及为什么要这样做。 【参考方案1】:

您可能有两种选择:

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

如果你使用自制软件,命令是:

brew uninstall ruby

对于没有自制软件的 rails 卸载命令是:

rvm remove

这应该通过运行命令重新安装最新的 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

这告诉我必须下载纱线,我没有为它保存输出。基本上,如果它与我的操作系统有关,我会按照提示告诉我做什么。

-D

【讨论】:

【参考方案2】:

正如人们所说,问题来自自“El Capitan”以来 Mac OSX 的安全功能。

使用默认系统 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)

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

如果您尝试安装的 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 

应该返回这个错误:

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

【讨论】:

【参考方案5】:

我在安装 El Capitan 后遇到了同样的问题,我尝试将 sass 和 compass 安装到 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 install 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

我现在所有的宝石都在工作,可以继续构建一些可爱的 sass 东西 :)

【讨论】:

【参考方案6】:

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

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

[编辑] 还有一个初步的事情要做:升级 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

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

$ brew link <formula>

【讨论】:

【参考方案7】:

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

brew install ruby

在此之后,您需要注销并重新登录,无论是图形方式还是只是重新启动终端。

【讨论】:

对我来说效果很好!我想它消除了捆绑的 ruby​​ 安装中的任何奇怪之处...... IMO 这是最好的解决方案。 你可以用 ``` which -a ruby​​ `` 判断哪个 ruby​​ 正在运行,在我的机器上给出:``` $ which -a ruby​​ /usr/local/bin/ruby / usr/local/bin/ruby /usr/bin/ruby ``` 至于为什么 /usr/local/bin 在 PATH 上两次——看起来像 brew install ruby 把它放在那里,即使它已经在那里。大概 /usr/local 中的 ruby​​ 被配置为将其 gem 安装在不需要 root 访问权限的位置(实际上这很有意义)。 P.S.您需要注销并重新登录(通过终端),否则gem install 仍然会失败。 对我来说效果很好。我将接受的答案与这个答案结合起来。谢谢你们俩 您不必注销并重新登录。只需运行rehash 以确保您的shell 意识到$PATH 之前有一个新的ruby。即使在您还没有在 shell 会话中运行 ruby 的情况下也不需要这样做。【参考方案8】:
sudo gem install -n /usr/local/bin cocoapods

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

【讨论】:

绝对不是。【参考方案9】:

重新安装 RVM 对我有用,但之后我必须重新安装所有 gem:

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

【讨论】:

【参考方案10】:

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

$ gem install *** --user-install

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

$ gem install fake3 --user-install

【讨论】:

是的!非常感谢! 在使用 brew 方法花费 30 分钟后,最后关闭终端等,此解决方案在 10.10.5 上有效,但仍然不确定为什么 brew 方法不起作用。请说清楚。 which ruby​​ post brew install /usr/bin/ruby 哇,现在问题又回来了 gem install redcarpet -v '3.3.4' --user-install throwing error 警告:你没有 /Users/user_name/.gem/ruby/2.0。 0/bin 在你的 PATH 中,gem 可执行文件将不会运行。早些时候我没有收到这个错误 ***.com/questions/19579392/… ,这帮助我终于解决了问题【参考方案11】:
sudo chown -R $(whoami):admin /usr/local

这将返回权限(Homebrew 在那里安装 ruby​​)

【讨论】:

如果您运行此命令并且它弄乱了您的 mysql 数据的权限,您需要重新设置权限。这是如何做。 stillatmylinux.com/not-every-linux-command-is-good-for-you【参考方案12】:

我不喜欢用 sudo 安装东西。 一旦你从 sudo 开始,你就无法停止..

尝试授予 Gems 目录的权限。

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0

【讨论】:

不要更改系统 Ruby gem 的所有权。当 Mac OS 尝试更新任何内容时,这可能会导致问题。【参考方案13】:

这是我使用的解决方案:

注意:此修复适用于我在另一个 SO 问题上所写的指南针,但我使用相同的过程来恢复所有终端进程的功能,显然您正在安装的 gem 是不同的,但过程是一样。

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

以恢复模式重启:

重启并按住Command + R,直到看到苹果标志。

启动后,从顶部栏中选择 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

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

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

sudo gem pristine ffi --version 1.9.3

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

Screenshot

【讨论】:

【参考方案14】:

您必须将 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

【讨论】:

【参考方案15】:

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

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

选项 1:继续使用 sudo

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

问题是这些二进制文件被安装到/usr/bin,自El Capitan以来就是off-limits。但是,您可以将它们安装到 /usr/local/bin 中。那是Homebrew 安装它的地方,所以probably 已经存在了。

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

Gems 将安装到 /usr/local/bin 中,如果它位于 PATH 中,您系统上的每个用户都可以使用它们。

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

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

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

将其设为默认值

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

gem: -n/usr/local/bin

echo "gem: -n/usr/local/bin" &gt;&gt; ~/.gemrc

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

echo "gem: --user-install -n~/bin" &gt;&gt; ~/.gemrc

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

【讨论】:

非常感谢!我一直在努力使用新版本的 brew 和 ruby​​,但仍然无法通过 /usr/bin 问题。在运行gem install 时指定所需路径解决了问题。 .gemrc 应该有gem: -n /usr/local/bin(-n 后面需要一个空格)。 @PaulSchreiber 好吧,我已经在没有空间的情况下使用它五个月了。 :) 你确定吗? 选项 #2 加 1,如果您只想要那些没有单独 Ruby 的二进制文件,这是一个可行且安全的替代方案。我们的主目录是添加 gem 的理想场所,对 PATH 的快速调整使它们可以访问。我不能推荐选项 #1,因为 someone 最终会覆盖 gem 并破坏他们的系统 Ruby 或使用它的 Apple 内置代码,然后他们会在 SO 上提出另一个问题如何解决它。 这是一个很好的答案,但可能已经过时了。在 Sierra 上,我需要的选项是 --install-dir /usr/local/bin

以上是关于无法在 OS X“El Capitan”上安装 gem的主要内容,如果未能解决你的问题,请参考以下文章

sh 在OS X El Capitan上安装Autoconf和Automake

制作 Mac OS X El Capitan 的U盘引导安装

如何在 OS X El Capitan 上安装 ngrok?

尝试在 OS X El Capitan 上安装 PyCrypto 时出现致命错误

在 Mac OS X El Capitan 10.11.4 上安装 MySQL 5.7

使用 Python 3.5.1 在 OS X El Capitan 上安装 OpenCV 3.1