我无法在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.
答案 0 :(得分:328)
免责声明: @theTinMan和其他Ruby开发人员经常指出在安装gem时不要使用sudo
并指向RVM之类的东西。在进行Ruby开发时,这是绝对正确的。继续使用它。
但是,我们中的许多人只是想要一些碰巧作为gem分发的二进制文件(例如fakes3
,cocoapods
,xcpretty
...)。我绝对不想打扰管理一个单独的红宝石。以下是您更快捷的选择:
如果您希望全局安装这些工具,则使用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。
以下内容将在~/.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)
答案 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目录:
[编辑]还有一个初步的事情要做:升级Xcode ......
$ sudo chown -R $(whoami):admin /usr/local
这将修复/usr/local
目录的权限,这将有助于gem install
和brew install|link|...
命令正常工作。
确保您已修复/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 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分钟来修复它,但是您将拥有指南针工作的终端命令。
答案 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)
您可能有两个选择:
rvm fix-permissions
~
目录(也称为主目录)中。如果您使用自制软件,则命令为:
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)