rails - La instalación de gemas o la actualización de RubyGems falla con un error de permisos
ruby kali linux (23)
El intento de instalar una gema ( gem install mygem
) o actualizar RubyGems ( gem update --system
) falla con este error:
ERROR: While executing gem ... (Gem::FilePermissionError) You don''t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
¿Alguien tiene idea de cómo resolver esto?
No tiene permisos de escritura en el directorio /Library/Ruby/Gems/1.8.
significa exactamente eso, no tienes permiso para escribir allí.
Esa es la versión de Ruby instalada por Apple, para su propio uso. Aunque está bien hacer modificaciones menores a eso si sabes lo que estás haciendo , porque no estás seguro del problema de los permisos, diría que no es una buena idea continuar por ese camino.
En su lugar, le sugeriré encarecidamente que utilice rbenv o RVM para administrar un Ruby separado, instalado en un sandbox en su directorio de inicio, que puede modificar / fold / spindle / change sin tener que preocuparse de estropear el sistema Ruby.
Entre los dos, uso rbenv, aunque usé mucho RVM en el pasado. rbenv toma un enfoque más "sin intervención" para administrar su instalación de Ruby. RVM tiene muchas características y es muy potente, pero, como resultado, es más intrusivo. En cualquier caso, LEA la documentación de instalación un par de veces antes de comenzar a instalar lo que elija.
Como lo señaló el bobbdelsol, el refrito funcionó para mí:
==> which ruby
/usr/bin/ruby
==> rbenv install 1.9.3-p551
Downloading ruby-1.9.3-p551.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2
Installing ruby-1.9.3-p551...
Installed ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551
==> which ruby
/Users/username/.rbenv/shims/ruby
==> which gem
/Users/username/.rbenv/shims/gem
==> gem install compass
ERROR: While executing gem ... (Gem::FilePermissionError)
You don''t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
==> rbenv global 1.9.3-p551
==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
==> rbenv global 1.9.3-p551
==> rbenv rehash
==> ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0]
==> gem install compass
Fetching: sass-3.4.22.gem (100%)
Fetching: multi_json-1.11.3.gem (100%)
Fetching: compass-core-1.0.3.gem (100%)
Fetching: compass-import-once-1.0.5.gem (100%)
Fetching: chunky_png-1.3.5.gem (100%)
Fetching: rb-fsevent-0.9.7.gem (100%)
Fetching: ffi-1.9.10.gem (100%)
Building native extensions. This could take a while...
Fetching: rb-inotify-0.9.7.gem (100%)
Fetching: compass-1.0.3.gem (100%)
Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
Successfully installed sass-3.4.22
Successfully installed multi_json-1.11.3
Successfully installed compass-core-1.0.3
Successfully installed compass-import-once-1.0.5
Successfully installed chunky_png-1.3.5
Successfully installed rb-fsevent-0.9.7
Successfully installed ffi-1.9.10
Successfully installed rb-inotify-0.9.7
Successfully installed compass-1.0.3
9 gems installed
Installing ri documentation for sass-3.4.22...
Installing ri documentation for multi_json-1.11.3...
Installing ri documentation for compass-core-1.0.3...
Installing ri documentation for compass-import-once-1.0.5...
Installing ri documentation for chunky_png-1.3.5...
Installing ri documentation for rb-fsevent-0.9.7...
Installing ri documentation for ffi-1.9.10...
Installing ri documentation for rb-inotify-0.9.7...
Installing ri documentation for compass-1.0.3...
Installing RDoc documentation for sass-3.4.22...
Installing RDoc documentation for multi_json-1.11.3...
Installing RDoc documentation for compass-core-1.0.3...
Installing RDoc documentation for compass-import-once-1.0.5...
Installing RDoc documentation for chunky_png-1.3.5...
Installing RDoc documentation for rb-fsevent-0.9.7...
Installing RDoc documentation for ffi-1.9.10...
Installing RDoc documentation for rb-inotify-0.9.7...
Installing RDoc documentation for compass-1.0.3...
Compruebe si su versión de Ruby es correcta. Si no, cámbiala.
Esto funciona para mí:
$ rbenv global 1.9.3-p547
$ gem update --system
Deberías estar usando un gestor de versiones de Ruby.
Usar uno correctamente evitaría y puede resolver su problema de permisos al ejecutar un comando de gem update
.
Recomiendo rbenv .
Sin embargo, incluso cuando utiliza un administrador de versiones de Ruby, es posible que reciba el mismo mensaje de error.
Si lo hace, y está usando rbenv, simplemente verifique que el directorio ~/.rbenv/shims
esté antes de la ruta del sistema Ruby.
$ echo $PATH
le mostrará el orden de su ruta de carga.
Si encuentra que su directorio shims viene después del directorio de Ruby bin de su sistema, edite su archivo ~/.bashrc
y ponga esto como su último comando export PATH=$HOME/.rbenv/shims:$PATH
: export PATH=$HOME/.rbenv/shims:$PATH
$ ruby -v
te muestra qué versión de Ruby estás usando
Esto muestra que actualmente estoy usando la versión del sistema de Ruby (generalmente no es buena)
$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
$ rbenv global 1.9.3-p448
me cambia a una versión más nueva, preinstalada (consulte las referencias a continuación).
Esto muestra que estoy usando una versión más nueva de Ruby (que probablemente no causará el Gem :: FilePermissionError)
$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]
Por lo general, no es necesario prefaciar un comando de gema con sudo. Si sientes la necesidad de hacerlo, es probable que algo esté mal configurado.
Para detalles sobre rbenv vea lo siguiente:
El motivo del error se debe a que no ha iniciado sesión como usuario root en el terminal.
Si ya tiene habilitado el uso de root en su mac en el tipo de terminal
$ su
Si no tiene un usuario root, debe habilitarlo siguiendo los siguientes pasos
- En el menú Apple, elija Preferencias del sistema ...
- En el menú Ver, seleccione Usuarios y grupos.
- Haga clic en el bloqueo y autenticar como una cuenta de administrador
- Haga clic en Opciones de inicio de sesión ...
- Haga clic en el botón "Editar ..." o "Unirse ..." en la parte inferior derecha.
- Haga clic en el botón "Abrir la utilidad de directorio ...".
- Haga clic en el bloqueo en la ventana de la utilidad de directorio.
- Ingrese un nombre de cuenta y contraseña de administrador, luego haga clic en Aceptar.
- Seleccione Activar usuario raíz en el menú Editar.
- Ingrese la contraseña de root que desea usar en los campos Contraseña y Verificar, luego haga clic en Aceptar.
Más al mismo en http://support.apple.com/kb/ht1528
Al menos esto me funciona después de quedarme atascado por un par de horas.
Esto funcionó para mí. Además, si instaló gemas como raíz anteriormente, soluciona ese problema cambiando la propiedad de nuevo a usted (mejor en cuanto a seguridad).
sudo chown -R `whoami` /Library/Ruby/Gems
Había formateado mi Mac y muchas soluciones sugeridas no funcionaban para mí. Lo que me funcionó son estos comandos en el orden correcto:
Instalar Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Instala Ruby:
brew install ruby
Instalar compás:
sudo gem install compass
Hay dos rutas: Utilice rbenv o RVM. Hay recetas para ambos a continuación. Antes de hacerlo, es probable que desee desactivar la instalación de documentos locales para gemas.
echo "gem: --no-ri --no-rdoc" >> ~/.gemrc
Entonces:
correr:
rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system
Esto instala una versión actualizada del sistema de gemas en sus directorios locales. Eso significa que no interfieres con la configuración del sistema. Si está haciendo esta pregunta, no debería meterse con la seguridad del sistema, y pasará más tiempo comprendiendo los problemas que puede enfrentar, en lugar de tener una manera fácil de evitar el problema con el que comenzó. Aprenda InfoSec más adelante, cuando sepa más sobre el sistema operativo y la programación.
Para una alternativa use ''RVM'' en su lugar: Para instalar rvm ejecute:
rvm install 2.1.2
rvm use 2.1.2
gem update --system
Esto tiene el mismo resultado, terminas con un sistema local de Ruby y Gem que no interfiere con las versiones del sistema. No hay necesidad de Homebrew, o de librerías de sistema que dominan, etc.
He encontrado este sudo
para sudo
menos gema :
-
brew install rbenv ruby-build
-
sudo gem update --system
añadir exportaciones a
.bashrc
:export RBENV_ROOT="$(brew --prefix rbenv)" export GEM_HOME="$(brew --prefix)/opt/gems" export GEM_PATH="$(brew --prefix)/opt/gems"
Y finalmente agrega esto a tu
~/.gemrc
:gem: -n/usr/local/bin
gem update --system
Instale rbenv por brew install rbenv
;
Luego ponga eval "$(rbenv init -)"
al final de ~ / .bash_profile (o ~ / .zshrc de MacOS);
¡Abre un nuevo terminal y ejecuta la gem install ***
funcionará!
Intente agregar --user-install
lugar de usar sudo
:
gem install mygem --user-install
Necesitaba hacer un rbenv rehash
para que apunte a mi biblioteca local de Gem.
Parece que tienes a tu administrador de gemas apuntando a la biblioteca del sistema, así que, en lugar de meterte con los permisos, haz el equivalente de "rehash" para que tu administrador haga que las cosas apunten localmente.
Necesitas corregir tus caminos.
Para determinar si esta corrección funcionará, ejecute lo siguiente:
which gem
Esto debería generar un directorio en el que no tiene permisos para:
/usr/bin/gem
Para solucionar esto realice los siguientes pasos.
Determine la ruta que necesita copiar a su perfil:
rbenv init -
La primera línea de la salida es la línea que necesita copiar a su perfil:
export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
rbenv rehash 2>/dev/null
rbenv() {
typeset command
command="$1"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
rehash|shell)
eval `rbenv "sh-$command" "$@"`;;
*)
command rbenv "$command" "$@";;
esac
}
Copia la ruta a tu perfil y guárdala.
Vuelve a cargar tu perfil (fuente ~ / .zshenv para mí)
Ejecutar
rbenv rehash
Ahora, cuando ejecuta which gem
debe obtener una ruta de acceso local para la que tiene permisos para:
/Users/justin/.rbenv/shims/gem
Para mí, el problema se debió al uso de rbenv
y al olvido de configurar la versión correcta de manera global.
Así que tuve que configurarlo con rbenv global xxx
En mi caso instalé 2.0.0-p247
así que tuve que emitir el comando:
rbenv global 2.0.0-p247
rbenv rehash
Entonces todo funcionaba bien.
Porque no haces
sudo gem update --system
Pruebe la respuesta de nathanwhy antes de usar mi respuesta original a continuación. Su recomendación de - --user-install
debería cumplir el mismo propósito sin tener que muck con su .bash_profile
o determinar su versión de ruby.
Si no está preocupado por una versión específica de ruby, puede omitir las opciones del administrador de entornos ruby de carga pesada , y simplemente agregar estas líneas a ~/.bash_profile
:
export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"
El camino se roba de la salida original de gem env
:
RubyGems Environment:
- RUBYGEMS VERSION: 2.0.14
- RUBY VERSION: 2.0.0
- INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
- RUBY EXECUTABLE: /System/Library/.../2.0/usr/bin/ruby
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- ruby
- universal-darwin-14
- GEM PATHS:
- /Library/Ruby/Gems/2.0.0
- /Users/mylogin/.gem/ruby/2.0.0 # <-- This guy, right here.
- /System/Library/.../usr/lib/ruby/gems/2.0.0
...
No se requiere sudo
, y puede usar el ruby ya instalado, cortesía de Apple.
Puedes usar: gem install cocoapods --pre --user
Si bien muchas de estas respuestas son correctas y funcionarán, no son las más correctas, ya que representan un conjunto de prácticas inseguras, o solo te enseñan cómo resolver este problema.
No tener el permiso de escritura correcto para una carpeta es un problema común con el que estará plagado de instalar paquetes de Python, paquetes de nodos, etc.
Usar sudo
no es seguro, porque le permite al instalador de paquetes hacer lo que quiera, e instalar cosas donde quiera. En resumen, alguien podría escribir un paquete que instale una puerta trasera en su computadora y robe toda la información de su tarjeta de crédito.
Usar un entorno virtual como rbenv es una gran cosa para aprender a hacerlo, porque le permite empaquetar su aplicación y enviarla con bastante facilidad. Recomiendo encarecidamente utilizar un entorno virtual. Además, si no tiene experiencia con un entorno virtual, es posible que esté instalando paquetes una y otra vez en todo su sistema, que en su lugar solo podría instalar globalmente y usar virtualmente. No sé sobre rbenv, pero lo hago mucho con Virtualenv.
LA VERDAD
La respuesta es chown
, y chown
te liberará.
No sé si le gusta la línea de comandos, pero esto hará que trabajar en cualquier proyecto con cualquier herramienta que instale paquetes en su sistema sea muy fácil.
chown
por lo que puedo decir, representa la propiedad del cambio.
La razón por la que vine buscando esta respuesta es porque la gem install
lanzó este error hoy:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don''t have write permissions into the /var/lib/gems/1.9.1 directory.
Esta es una oportunidad perfecta para usar chown
. Verá que Ruby nos ha dado el directorio al que necesita acceso, y parece que es un directorio que usará bastante a menudo.
En este caso, solo hay tres cosas que uno necesita saber para resolver el problema, pero chown
es mucho más poderoso y le otorga mucha más flexibilidad de la que demostraré ahora. Por favor, consulte la fuente en la parte inferior para obtener más información.
Las dos cosas
- Nombre de usuario
- Directorio
Si estás en un shell, encontrar el nombre de usuario es fácil. Basta con mirar el aviso. El mío se parece a
breadly@breadly-desktop:~/Desktop
El usuario actual es solo el nombre antes de @
. Conocemos el directorio a partir de los mensajes de error, pero tiene dos opciones. Puede limitar su permiso a la versión actual usando ../gems/1.9.1
, o puede otorgar permiso de escritura para gemas de todas las versiones usando ../gems
.
El comando para cambiar realmente la propiedad se vería así.
chown -R $(whoami) /absolute/path/to/directory
La -R
se conoce como una bandera y la bandera -R
generalmente le dice a un comando que haga algo recursivamente, o en otras palabras, ejecute el comando en cada cosa que está contenida en el directorio, y todas las cosas contenidas en los directorios contenidos en, Y así hasta que no haya nada más.
Trabaja para mi:
sudo gem uninstall cocoapods
sudo gem install cocoapods
Utilicé esto y trabajé.
$ sudo chown myuser /var/lib/gems
cd /Library/Ruby/Gems/2.0.0
abierto .
haga clic derecho para obtener información
haga clic en bloquear
colocar contraseña
Haz que todo lea y escriba.
Instalar gema o actualizar RubyGems falla con error de permisos. Luego escriba este comando
sudo gem install cocoapods
sudo gem update --system
sudo gem install (gemfile)