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

时间:2015-08-12 18:39:44

标签: ruby macos rubygems

我无法在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.

14 个答案:

答案 0 :(得分:328)

免责声明: @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中安装宝石,并将二进制文件放入~/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开发人员文档。)

答案 1 :(得分:102)

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

brew install ruby

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

答案 2 :(得分:37)

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

$ gem install *** --user-install

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

$ gem install fake3 --user-install

答案 3 :(得分:24)

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

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

答案 4 :(得分:18)

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

答案 5 :(得分:10)

在升级到OS X El Capitain时,可以通过多种方式修改/ usr / local目录:

  1. 重置用户权限(对于使用Homebrew的人来说这也是一个问题)
  2. 二进制文件和符号链接可能已被删除或更改
  3. [编辑]还有一个初步的事情要做:升级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>
    

答案 6 :(得分:3)

如前所述,问题来自于自“El Capitan”以来Mac OSX的安全功能。

使用默认系统Ruby,安装过程发生在 if(gps.canGetLocation()) { latitude = gps.getLatitude(); longitude = gps.getLongitude(); SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_WORLD_READABLE); SharedPreferences.Editor editor = prefs.edit(); editor.putFloat(LATITUDE, (float) latitude); editor.putFloat(LONGITUDE, (float) longitude); editor.putBoolean("IsNotEmpty", true); editor.apply(); } else { SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_WORLD_READABLE); if (prefs.getBoolean("IsNotEmpty",true)) { latitude = (double) prefs.getFloat(LATITUDE, 0); longitude = (double) prefs.getFloat(LONGITUDE, 0); } else { latitude = 56.130366; longitude = -106.346771; } } 目录中,该目录对用户不可用并给出错误。

您可以使用命令

查看Ruby环境参数
/Library/Ruby/Gems/2.0.0

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

sudo

在此过程中不应再有任何权利问题。然后将宝石安装在用户目录中:$ gem install myGemName --user-install

但是为了使已安装的gem可用,您的路径中应该可以使用此目录。根据{{​​3}},您可以将以下行添加到~/.gem/Ruby/2.0.0/bin~/.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

答案 7 :(得分:1)

这是我使用的解决方案:

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

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

在恢复模式下重新启动:

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

启动后,选择实用程序&gt;顶部的终端

输入: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

答案 8 :(得分:1)

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

答案 9 :(得分:0)

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

$ sudo gem install compass

错误:安装罗盘时出错:     错误:无法构建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':The编译器无法生成可执行文件。 (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 compass

然后我能够运行$ compass init

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

答案 10 :(得分:0)

我必须rm -rf ./vendor然后再次运行bundle install

答案 11 :(得分:0)

您可能有两个选择:

  1. 如果已安装ruby和rails,则可以首先尝试运行以下命令:
    rvm fix-permissions 
    
  2. 您可以完全卸载ruby,然后将其重新安装到~目录(也称为主目录)中。

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

brew uninstall ruby

对于没有自制程序的Rails卸载,命令为:

rvm remove

这应该通过运行命令重新安装最新的红宝石:

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,但没有保存输出。基本上,如果提示与我的操作系统有关,我会按照提示告诉我去做。

-D

答案 12 :(得分:-1)

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

尝试授予Gems目录的权限。

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

答案 13 :(得分:-1)

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

这会给予权限(Homebrew在那里安装ruby)