No se pueden instalar gemas en OS X "El Capitan"

182

No puedo instalar y ejecutar fakes3gem en El Capitan Beta 5.

Lo intenté:

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

Luego intenté hacerlo a la manera de los cacaopodos. Funcionó para cocoapods 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.
Himanshu Yadav
fuente
3
No utilices sudopara instalar Ruby, o cambiar gemas. En su lugar, use rbenv o RVM para instalar y administrar Ruby. Lea y siga las instrucciones en sus respectivos sitios. Y, en cualquier caso, después de la instalación, no lo use a sudomenos que entienda lo que está cambiando y por qué querría hacerlo.
The Tin Man

Respuestas:

333

Descargo de responsabilidad: @theTinMan y otros desarrolladores de Ruby a menudo señalan que no deben usarse sudoal instalar gemas y señalan cosas como RVM . Eso es absolutamente cierto cuando se hace el desarrollo de Ruby. Adelante y úsalo.

Sin embargo, muchos de nosotros simplemente queremos una binaria que pasa a ser distribuido como una joya (por ejemplo fakes3, cocoapods, xcpretty...). Definitivamente no quiero molestarme en administrar un rubí separado. Aquí están tus opciones más rápidas:

Opción 1: sigue usando sudo

El uso sudoprobablemente esté bien si desea que estas herramientas se instalen globalmente.

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

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

Se instalarán gemas /usr/local/biny todos los usuarios de su sistema pueden usarlas si están en su RUTA .

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

Lo siguiente instalará gemas ~/.gemy colocará binarios ~/bin(que luego debe agregar a su PATH).

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

Convertirlo en el predeterminado

De cualquier manera, puede agregar estos parámetros a su ~/.gemrcpara no tener 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 agregar --no-documentpara omitir la generación de documentación del desarrollador de Ruby).

nschum
fuente
Muchas gracias! He tenido problemas con las nuevas versiones de brew and ruby, pero aún no he podido pasar el problema / usr / bin. Especificar la ruta deseada cuando se ejecuta gem installresolvió el problema.
Daniel Saidi
El .gemrcdebería tener gem: -n /usr/local/bin(necesita un espacio después de -n).
Paul Schreiber
@PaulSchreiber Bueno, lo he estado usando sin espacio durante cinco meses. :) ¿Estás seguro?
nschum
2
Plus 1 para la Opción # 2, que es una alternativa viable y segura si solo desea esos binarios sin un Ruby separado. Nuestros directorios de inicio son el lugar perfecto para las gemas agregadas, y un ajuste rápido a PATH los hace accesibles. No puedo recomendar la Opción # 1 porque alguien terminará sobrescribiendo una gema y rompiendo su sistema Ruby o el código incorporado de Apple que lo usa, y luego harán otra pregunta en SO sobre cómo solucionarlo.
The Tin Man
1
Esta es una excelente respuesta, pero tal vez desactualizada. En Sierra, la opción que necesitaba era --install-dir / usr / local / bin
Ryan Ballantyne
107

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

brew install ruby

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

Francisco González Rull
fuente
¡Funcionó bien para mí! Supongo que se deshace de cualquier rareza en la instalación incluida de ruby ​​... OMI, esta es la mejor solución.
n13
Puede saber qué ruby ​​se está ejecutando con `` which -a ruby ​​'' `En mi máquina que da:` `` $ which -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` En cuanto a por qué / usr / local / bin está en PATH dos veces, parece que lo brew install rubypone allí, incluso si ya está allí. Presumiblemente, el ruby ​​en / usr / local está configurado para instalar sus gemas en una ubicación que no necesita acceso a la raíz (lo que tiene mucho sentido en realidad).
WallStProg
77
PD: debe cerrar sesión y volver a iniciar sesión (a través de la Terminal) o gem installaún fallará.
WallStProg
Funcionó bien para mí. Combiné la respuesta aceptada con esta. Gracias a los dos
youssman
1
No tiene que cerrar sesión y volver a iniciarla. Simplemente ejecute rehashpara asegurarse de que su shell se dé cuenta de que hay una nueva rubyantes $PATH. Incluso esto no será necesario en la situación en la que aún no se rubyhaya ejecutado en la sesión de shell.
Radon Rosborough
38

Esto se debe a la nueva función de seguridad de OS X "El Capitan". Intente agregar en --user-installlugar de usar sudo:

$ gem install *** --user-install

Por ejemplo, si desea instalar fake3 simplemente use:

$ gem install fake3 --user-install
Shao Wenbin
fuente
¡Si! Muchas gracias!
Louis Magnotti
Después de pasar 30 minutos con el enfoque de preparación, cerrar el terminal, etc., finalmente esta solución funcionó en 10.10.5 Pero aún no estoy seguro de por qué el enfoque de preparación no funcionó. Por favor aclarar cuál instalación de publicación de Ruby / usr / bin / ruby
vikramvi
1
Wow ahora el problema está de vuelta gem install redcarpet -v '3.3.4' - error de lanzamiento de instalación del usuario ADVERTENCIA: No tiene /Users/user_name/.gem/ruby/2.0.0/bin en su RUTA, gem los ejecutables no se ejecutarán. Anteriormente no recibía este error
vikramvi
1
stackoverflow.com/questions/19579392/… , esto me ayudó a resolver el problema por fin
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Prueba esto. Definitivamente funcionará.

Femina Brahmbhatt
fuente
2
definitivamente no.
Maarten Hartman el
19

Debe 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 no funciona, intente instalar la gema 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
astrasleepz
fuente
10

Parece que cuando se actualiza a OS X El Capitain, el directorio / usr / local se modifica de varias 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 pueden haber sido eliminados o alterados

[Editar] También hay una cosa preliminar que hacer: actualizar Xcode ...

Solución para el n. ° 1:

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

Esto corregirá los permisos en el /usr/localdirectorio que luego ayudará a que ambos gem instally los brew install|link|...comandos funcionen correctamente.

Solución al # 2:

Problemas basados ​​en Ruby

Asegúrate de haber corregido los permisos del /usr/localdirectorio (ver # 1 arriba)

Primero intente reinstalar su gema usando:

sudo gem install <gemname>

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

Si no desea enfrentar problemas de compatibilidad con versiones anteriores, le sugiero que primero determine qué versión de qué gema desea obtener y luego vuelva a instalarla con el -v version. Vea 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

Problemas basados ​​en cerveza

Actualiza brew y mejora tus fórmulas

$ brew update
$ brew upgrade

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

$ brew link <formula>
foobar
fuente
3

Como se ha dicho, el problema proviene de una función de seguridad de Mac OSX desde "El Capitan".

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

Puede echar un vistazo a los parámetros de sus entornos 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 el --user-installparámetro en su lugar, ya sudoque nunca es una forma recomendada de hacerlo.

$ gem install myGemName --user-install

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

Pero para que las gemas instaladas estén disponibles, este directorio debe estar disponible en su ruta. Según el FAQ de Ruby , puede añadir la siguiente línea a su ~/.bash_profileo~/.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 recargue su terminal o recargue su .bash_profileo .bashrc( . ~/.bash_profile)

emchateau
fuente
2

Esta es la solución que he usado:

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

Tuve el mismo problema. Se debe a que Apple implementó la Protección de integridad del sistema (SIP). Primero debes deshabilitar eso ...

Reiniciar en modo de recuperación:

Reinicie y mantenga presionadas las teclas Comando + R hasta que vea el logotipo de Apple.

Una vez arrancado, seleccione Utilidades> Terminal en la barra superior.

tipo: csrutil disable

luego escriba: 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

Las gemas individuales que fallaron necesitan ser reparadas, así 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

Continúe con la lista de gemas que deben repararse. En total, está buscando unos 10 minutos para solucionarlo, pero tendrá comandos de terminal para que funcione la brújula.

Captura de pantalla

jbalesteri
fuente
2

Si la gema que está intentando instalar requiere bibliotecas xml, intente esto:

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

Específicamente, me encontré con un problema al instalar la gema nokogiri 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 instalado libxml2 y libxslt, puede hacer lo siguiente:

brew install libxml2 libxslt
brew install libiconv

y luego verifique para asegurarse de que tiene 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
Anirban Nandi 'Alegría'
fuente
1

Reinstalar RVM funcionó para mí, pero tuve que reinstalar todas mis gemas después:

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

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

$ sudo gem gem compass

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

/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 compilador no pudo generar un Archivo ejecutable. (Error de tiempo de ejecución)

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

Recibí 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, luego la cerró de nuevo y luego ejecutó con éxito el mismo comando, después de lo cual funcionó para ellos. Intenté abrir xcode pero me apareció un mensaje que decía que la versión de xcode instalada no era compatible con El Capitan. Entonces actualicé xcode desde la tienda de aplicaciones, volví a ejecutar el siguiente comando que esta vez se ejecutó correctamente:

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

Entonces pude ejecutar $ compass init

Ahora tengo todas mis gemas funcionando y puedo proceder a construir algunas cosas encantadoras :)

Barry Poore
fuente
0

rm -rf ./vendorLuego tuve que correr de bundle installnuevo.

VoA
fuente
-1

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

intente otorgar permisos al directorio de gemas.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
fuente
2
No cambie la propiedad de las gemas del sistema Ruby. Eso puede causar problemas cuando Mac OS intenta actualizar algo.
The Tin Man el
-1
sudo chown -R $(whoami):admin /usr/local

Eso devolverá los permisos (Homebrew instala ruby ​​allí)

Espejo318
fuente
2
Si ejecuta este comando y arruina los permisos de sus datos MySQL, deberá volver a configurar los permisos. Así es cómo. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux el