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


182

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

我试过了:

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

然后我尝试用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.

3
不要sudo用于安装Ruby或更改gem。而是使用rbenvRVM安装和管理Ruby。阅读并遵循各自网站上的指示。而且,无论哪种情况,在安装后都不要使用,sudo除非您了解正在发生的变化以及为什么要这样做。
Tin Man

Answers:


333

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

然而,我们许多人只是想一些二进制碰巧被分配作为宝石(例如fakes3cocoapodsxcpretty...)。我绝对不想管理一个单独的红宝石。这是您更快的选择:

选项1:继续使用sudo

sudo如果您希望在全球范围内安装这些工具,则使用可能会很好。

问题是这些二进制文件已安装到中/usr/bin,这是自El Capitan以来禁止使用的。但是,您可以将它们安装到其中/usr/local/bin。那是Homebrew安装东西的地方,所以它可能已经存在。

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

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

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

以下内容将安装gems ~/.gem并将其中的二进制文件放入~/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开发人员文档。)


非常感谢!我一直在尝试新版本的brew和ruby,但仍然无法通过/ usr / bin问题。在运行时指定所需的路径可以gem install解决该问题。
丹尼尔·赛迪

.gemrc应该有gem: -n /usr/local/bin(需要之后-n一个空格)。
Paul Schreiber,

@PaulSchreiber好吧,我已经五个月没有空间使用它了。:) 你确定吗?
nschum

2
选项1的加号1,如果您只想要那些没有单独的Ruby的二进制文件,那么这是一种可行且安全的选择。我们的主目录是添加宝石的理想场所,对PATH的快速调整使其可以访问。我不建议使用选项#1,因为最终有人会覆盖gem并破坏其系统Ruby或使用该gem的Apple内置代码,然后他们会在SO上提出另一个有关如何解决它的问题。
Tin Man

1
这是一个很好的答案,但可能已经过时了。在Sierra上,我需要的选项是--install-dir / usr / local / bin
Ryan Ballantyne

107

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

brew install ruby

此后,您需要注销并重新登录,或者以图形方式或仅重新启动终端。


对我来说很好!我想它消除了捆绑的红宝石安装中的任何怪异... IMO,这是最好的解决方案。
n13

您可以在我的机器上通过```-which -a ruby​​```来判断正在运行哪个ruby。 usr / bin / ruby​​```关于/ usr / local / bin为什么两次在PATH上的原因-看起来就像brew install ruby把它放在那儿一样,即使它已经在那儿了。大概将/ usr / local中的ruby配置为将其gem安装在不需要root访问的位置(实际上很合理)。
WallStProg

7
PS您需要注销并重新登录(通过终端),gem install否则仍然会失败。
WallStProg '16

对我来说很好。我将接受的答案与此答案结合在一起。谢谢你们
youssman '16

1
您不必注销并再次登录。只需运行rehash以确保您的shell意识到之前有一个新ruby版本$PATH。在您ruby尚未在Shell会话中运行的情况下,甚至不需要这样做。
Radon Rosborough

38

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

$ gem install *** --user-install

例如,如果要安装fake3,请使用:

$ gem install fake3 --user-install

是! 非常感谢!
Louis Magnotti

经过30分钟的冲泡方法,最终关闭终端等之后,此解决方案在10.10.5上有效,但仍不确定为何冲泡方法不起作用。请澄清。哪个ruby post brew安装/ usr / bin / ruby
vikramvi

1
哇,现在问题又回来了gem install redcarpet -v'3.3.4'--user-install throwing error警告:您的PATH中没有/Users/user_name/.gem/ruby/2.0.0/bin,gem可执行文件将无法运行。之前我没有得到这个错误
vikramvi'1

1
stackoverflow.com/questions/19579392/…,这最终帮助我解决了问题
vikramvi


19

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

10

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

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

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

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

$ brew link <formula>

3

据说,此问题来自“ El Capitan”以来Mac OSX的安全功能。

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

您可以使用以下命令查看Ruby环境参数

$ gem env

有一个安装目录和一个用户安装目录。要使用用户安装目录而不是默认安装目录,可以使用--user-installparameter代替,因为using sudo从来都不推荐这样做。

$ gem install myGemName --user-install

在此过程中,不应再有任何供股。然后将gems安装在用户目录中:~/.gem/Ruby/2.0.0/bin

但是要使已安装的gem可用,该目录应该在您的路径中可用。根据Ruby的常见问题解答,您可以将以下行添加到您的~/.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


2

这是我使用的解决方案:

注意:此修复程序是针对指南针的,就像我在另一个SO问题上所写的那样,但是我使用相同的过程将功能恢复到所有终端过程,显然您要安装的gem是不同的,但是过程是相同的。

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

以恢复模式重启:

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

启动后,从顶部栏中选择实用程序>终端

类型: 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分钟的时间来解决它,但是您将拥有用于罗盘工作的终端命令。

屏幕截图


2

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

1

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

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

0

安装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:在`try_do'中:编译器无法生成可执行文件。(RuntimeError)

因此,我然后尝试使用以下命令安装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罗盘

然后我就可以运行$指南针init

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


0

rm -rf ./vendor然后我不得不bundle install再次跑步。


-1

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

尝试将权限授予Gems目录。

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

2
不要更改系统Ruby gem的所有权。当Mac OS尝试更新任何内容时,这可能会导致问题。
Tin

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.