无法在 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 install
和brew 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 分发的二进制文件(例如 fakes3
、cocoapods
、xcpretty
......)。我绝对不想费心管理单独的红宝石。以下是您更快的选择:
选项 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" >> ~/.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 后面需要一个空格)。
@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 时出现致命错误