No se pueden instalar gems en OS X “El Capitan”

No puedo instalar y ejecutar la gem de fakes3 en El Capitan Beta 5.

Lo intenté:

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

Entonces traté de hacerlo a los cocoápodos. Funcionó para cocoapodos pero no para falsificaciones3.

 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. 

Descargo de responsabilidad: @theTinMan y otros desarrolladores de Ruby a menudo señalan no usar sudo al instalar gems y señalar cosas como RVM . Eso es absolutamente cierto al hacer el desarrollo de Ruby. Adelante y usa eso.

Sin embargo, muchos de nosotros solo queremos un binario que se distribuya como una gem (por ejemplo, cocoapods , xcpretty , xcpretty …). Definitivamente no quiero molestarme en administrar un Ruby por separado. Estas son sus opciones más rápidas:

Opción 1: seguir usando sudo

Usar sudo probablemente sea correcto si desea que estas herramientas se instalen globalmente.

El problema es que estos binarios están instalados en /usr/bin , que está fuera de los límites desde El Capitán. Sin embargo, puede instalarlos en /usr/local/bin lugar. Ahí es donde Homebrew instala sus cosas, por lo que probablemente ya exista.

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

Las gems se instalarán en /usr/local/bin y todos los usuarios de tu sistema podrán usarlas si están en su RUTA .

Opción 2: Instalar en su directorio de inicio (sin sudo)

Lo siguiente instalará gems en ~/.gem y colocará binarios en ~/bin (que luego deberá agregar a su PATH ).

 gem install fakes3 --user-install -n~/bin 

Hazlo el predeterminado

De cualquier manera, puede agregar estos parámetros a su ~/.gemrc para que no tenga que recordarlos:

 gem: -n/usr/local/bin 

es decir, echo "gem: -n/usr/local/bin" >> ~/.gemrc

o

 gem: --user-install -n~/bin 

es decir, echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Sugerencia: también puede --no-document para omitir la generación de la documentación del desarrollador de Ruby).

En mi caso, tuve que volver a instalar Ruby usando Brew . Eso parece haber resuelto el problema, ya que puedo instalar gems nuevamente.

 brew install ruby 

Después de esto, debe cerrar sesión y volver a iniciar sesión, ya sea de forma gráfica o simplemente reiniciando su terminal.

Eso es debido a la nueva función de seguridad de OS X “El Capitan”. Intenta agregar --user-install lugar de usar sudo:

 $ gem install *** --user-install 

Por ejemplo, si quieres instalar fake3 simplemente usa:

 $ gem install fake3 --user-install 
 sudo gem install -n /usr/local/bin cocoapods 

Prueba esto. Definitivamente funcionará.

Tienes que actualizar Xcode a la más nueva (v7.0.1) y todo funcionará normalmente.

Si después de instalar el Xcode más nuevo y aún así no funciona, intente instalar la gem de esta manera:

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

Por ejemplo:

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

Parece que al actualizar a OS X El Capitain, el directorio / usr / local se modifica de múltiples maneras:

  1. los permisos de usuario se restablecen (esto también es un problema para las personas que usan Homebrew)
  2. binarios y enlaces simbólicos podrían haber sido eliminados o alterados

[Editar] También hay algo preliminar que hacer: actualizar Xcode …

Solución para el n. ° 1:

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

Esto arreglará los permisos en el directorio /usr/local , que luego ayudará tanto a la gem install como a la elaboración de los comandos de brew install|link|... funcionen correctamente.

Solución al # 2:

Problemas basados ​​en Ruby

Asegúrate de haber arreglado los permisos del directorio /usr/local (ver # 1 arriba)

Primero intente reinstalar su gem usando:

 sudo gem install  

Tenga en cuenta que instalará la última versión de la gem especificada.

Si no desea enfrentar problemas de compatibilidad con versiones anteriores, le sugiero que primero determine qué versión de la joya que desea obtener y luego vuelva a instalarla con la -v version . Consulte un ejemplo a continuación para asegurarse de que el sistema no obtenga una nueva versión de capistrano.

 $ gem list | grep capistrano capistrano (3.4.0, 3.2.1, 2.14.2) $ sudo gem install capistrano -v 3.4.0 

Cerveza basada en problemas

Actualiza brebaje y actualiza tus fórmulas

 $ brew update $ brew upgrade 

Es posible que también deba volver a vincular algunos de ellos manualmente

 $ brew link  

Como se ha dicho, el problema proviene de una función de seguridad de Mac OSX desde “El Capitán”.

Usando el sistema predeterminado Ruby, el proceso de instalación ocurre en el directorio /Library/Ruby/Gems/2.0.0 que no está disponible para el usuario y proporciona el error.

Puedes echar un vistazo a tus parámetros de ambientes Ruby con el comando

 $ gem env 

Hay un DIRECTORIO DE INSTALACIÓN y un DIRECTORIO DE INSTALACIÓN DEL USUARIO. Para usar el directorio de instalación del usuario en lugar del directorio de instalación predeterminado, puede usar --user-install parameter en su lugar como sudo que nunca es una manera recomendada de hacerlo.

 $ gem install myGemName --user-install 

Ya no debería haber ningún problema de derechos en el proceso. Las gems se instalan en el directorio de usuario: ~/.gem/Ruby/2.0.0/bin

Pero para hacer que las gems instaladas estén disponibles, este directorio debería estar disponible en su ruta. De acuerdo con el faq de Ruby , puede agregar la siguiente línea a su ~/.bash_profile o ~/.bashrc

 if which ruby >/dev/null && which gem >/dev/null; then PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" fi 

Luego cierre y vuelva a cargar su terminal o vuelva a cargar su .bash_profile o .bashrc ( . ~/.bash_profile )

Esta es la solución que he usado:

Nota: esta solución es para brújula, ya que la escribí en otra pregunta de SO, pero utilicé el mismo proceso para restaurar la funcionalidad en todos los procesos de terminal, obviamente las gems que está instalando son diferentes, pero el proceso es el mismo.

Tuve el mismo problema. Se debe a que Apple implementa la Protección de Integridad del Sistema (SIP). Primero debes desactivar eso …

Reiniciar en modo de recuperación:

Reinicia y mantén presionado Command + R hasta que veas el logo de Apple.

Una vez que haya arrancado, seleccione Utilidades> Terminal desde la barra superior.

tipo: csrutil disable

luego escribe: reboot

Una vez reiniciado

Abra la copia de seguridad del terminal e ingrese los comandos:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Deben corregirse las gems individuales que fallaron, por lo que para cada una haga lo siguiente:

En mi máquina esta era la primera dependencia que no funcionaba, así que la enumeré :

sudo gem pristine ffi --version 1.9.3

Proceda a través de la lista de gems que deben ser reparadas. En total, está buscando aproximadamente 10 minutos para arreglarlo, pero tendrá comandos de terminal para trabajar con la brújula.

Captura de pantalla

La reinstalación de RVM funcionó para mí, pero tuve que volver a instalar todas mis gems después:

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

Si la gem que está tratando de instalar requiere bibliotecas xml, intente esto:

 sudo gem install -n /usr/local/bin  -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/ 

Específicamente, me encontré con un problema al instalar el nokogiri gem v 1.6.8 en OS X El Capitan

y esto finalmente funcionó para mí:

 sudo gem install -n /usr/local/bin nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/ 

Para asegurarse de tener libxml2 y libxslt instalados, puede hacer:

 brew install libxml2 libxslt brew install libiconv 

y luego verifique para asegurarse de tener instaladas las herramientas de línea de comando xcode:

 xcode-select --install 

debería devolver este error:

 xcode-select: error: command line tools are already installed, use "Software Update" to install updates 

No me gusta instalar cosas con sudo. una vez que comienzas con sudo no puedes parar …

intente dar permisos al directorio Gems.

 sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0 
 sudo chown -R $(whoami):admin /usr/local 

Eso le devolverá los permisos (Homebrew instala Ruby allí)

Me encontré con el mismo problema después de instalar El Capitan, intenté instalar sass y brújula en un proyecto de Symfony, el siguiente comando arrojó el siguiente error:

$ sudo gem install compass

ERROR: Error al instalar la brújula: ERROR: Error al construir la extensión nativa de la gem.

 /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

buscando ffi.h … /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ‘: el comstackdor no pudo generar un Archivo ejecutable. (Error de tiempo de ejecución)

Entonces intenté instalar sass con: $ sudo gem install sass

Obtuve el mismo mensaje de error, después de buscar en Google logré instalar sass usando el siguiente comando:

$ sudo gem install -n / usr / local / bin sass

Lo anterior funcionó para mí con la instalación de Sass, pero no funcionó para instalar la brújula. Leí que alguien en algún lugar había abierto una instancia de xcode y luego la cerró de nuevo, y luego ejecutó con éxito el mismo comando después del cual funcionó para ellos. Intenté abrir xcode pero me preguntaron con un mensaje que decía que la versión de xcode instalada no era compatible con El Capitán. Entonces, actualicé xcode desde la tienda de aplicaciones, volví a ejecutar el siguiente comando, que esta vez se ejecutó con éxito:

$ sudo gem install -n / usr / local / bin compass

Entonces pude ejecutar $ brújula init

Ahora tengo todas mis gems en funcionamiento y puedo proceder a construir algunas cosas encantadoras 🙂

Tuve que rm -rf ./vendor luego ejecutar bundle install nuevamente.