无法在OS X上安装gem“El Capitan”
我无法在El Capitan Beta 5上安装并运行fakes3
gem。
我试过了:
sudo gem install fakes3 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/fakes3
然后我试着用椰子树的方式做。 它适用于椰子树,但不适用于假货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.
免责声明: @theTinMan和其他Ruby开发人员经常指出在安装gem时不要使用sudo
,并指向像RVM这样的东西。 在做Ruby开发时,这是绝对正确的。 继续使用。
然而,我们中的许多人只是想要一些二进制文件,而这些二进制文件就像是一个gem(例如fakes3
, cocoapods
, xcpretty
…)。 我绝对不想pipe理一个单独的ruby。 这里是你更快的select:
选项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)
下面将在~/.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开发者文档。)
在我的情况下,我不得不使用Brew重新安装Ruby。 这似乎已经解决了问题,因为我可以再次安装gem。
brew install ruby
在此之后,您需要注销并以graphics方式重新login,或者重新启动terminal。
这是因为OS X“El Capitan”的新安全function。 尝试添加--user-install
而不是使用sudo:
$ gem install *** --user-install
例如,如果你想安装fake3,只需使用:
$ gem install fake3 --user-install
sudo gem install -n /usr/local/bin cocoapods
尝试这个。 它肯定会工作。
你必须更新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
看起来像升级到OS X El Capitain时,/ usr / local目录被多种修改:
- 用户权限被重置(对于使用Homebrew的用户也是一个问题)
- 二进制文件和符号链接可能已被删除或更改
[编辑]还有一个初步的事情要做:升级Xcode …
解决scheme#1:
$ sudo chown -R $(whoami):admin /usr/local
这将修复/usr/local
目录的权限,这将帮助gem install
和brew install|link|...
命令正常工作。
解决scheme#2:
基于Ruby的问题
确保你已经修复了/usr/local
目录的权限(见上面的#1)
首先尝试重新安装你的gem使用:
sudo gem install <gemname>
请注意,它将安装指定的gem的最新版本。
如果您不想面对向后兼容性问题,我build议您先确定要获取哪个版本的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>
如前所述,这个问题来自于“El Capitan”以来Mac OSX的安全function。
使用默认的系统Ruby,安装过程发生在/Library/Ruby/Gems/2.0.0
目录中,该目录对用户不可用,并且出现错误。
您可以使用该命令查看您的Ruby环境参数
$ gem env
有一个安装目录和一个用户安装目录。 要使用用户安装目录而不是默认安装目录,可以使用--user-install
参数来代替使用sudo
,这从来不是推荐的方式。
$ gem install myGemName --user-install
在这个过程中不应该有任何权利问题。 然后将gems安装到用户目录: ~/.gem/Ruby/2.0.0/bin
但为了使安装的gem可用,这个目录应该在你的path中可用。 根据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
然后closures并重新加载您的terminal或重新加载您的.bash_profile
或.bashrc
( . ~/.bash_profile
)
这是我用过的解决scheme:
注意:这个修补程序是针对指南针的,因为我在另一个SO问题上编写了它,但是我已经使用相同的过程来恢复所有terminal进程的function,显然,您正在安装的gem是不同的,但是过程是相同的。
我遇到过同样的问题。 这是由于苹果正在实施系统完整性保护(SIP)。 你必须先禁用那个…
在恢复模式下重新启动:
重新启动并按住Command + R直到看到苹果标志。
一旦启动,从顶栏中select实用程序>terminal 。
键入: csrutil disable
然后input: reboot
一旦重新启动
打开terminal备份并input命令:
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
继续查看需要修复的gem列表。 在所有你正在寻找约10分钟来解决它,但你会有指南针的terminal命令工作。
截图
重新安装RVM为我工作,但之后我必须重新安装所有的gem:
rvm implode \curl -sSL https://get.rvm.io | bash -s stable --ruby rvm reload
如果你正在尝试安装的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
我不喜欢用sudo安装东西。 一旦你开始sudo你不能停止..
尝试授予Gems目录的权限。
sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
sudo chown -R $(whoami):admin /usr/local
这将给权限回来(家酿在那里安装ruby)
在安装El Capitan之后,我遇到了同样的问题,我尝试将sass和compass安装到symfony项目中,以下命令返回以下错误:
$ sudo gem install compass
错误:安装指南针时出错:错误:无法构buildgem原生扩展。
/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':编译器未能生成可执行文件。 (RuntimeError)
所以我然后试着安装sass:$ sudo gem install sass
得到了相同的错误消息,一些谷歌search后,我设法安装sass使用以下命令:
$ sudo gem install -n / usr / local / bin sass
上面的工作与我安装sass,但没有安装指南针的工作。 我读了某个地方的人打开了一个xcode的实例,然后再次closures它,然后成功地运行了相同的命令,之后为他们工作。 我试图打开xcode,但提示消息说安装的xcode版本与El Capitan不兼容。 于是我从app store更新了xcode,重新运行了下面的命令,这次成功运行:
$ sudo gem install -n / usr / local / bin compass
那时我可以运行$ compass init
我现在有我所有的gem工作,可以继续build立一些可爱的sass的东西:)
我必须rm -rf ./vendor
然后再次运行bundle install
。
- 通过重新启动进入恢复HD,同时保持⌘R。
- 打开terminal(从“实用程序”菜单中)。
-
在terminal中运行以下命令:
csrutil禁用
-
重新开始。
注意:已经在https://apple.stackexchange.com/questions/204312/cant-install-bundler-using-gem