No tiene permisos de escritura para el directorio /var/lib/gems/2.3.0

104

Tengo ruby ​​instalado en mi ubuntu 16.04.

$which ruby  

/usr/bin/ruby

$ruby -v 

ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]

$gem install bundler 

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /var/lib/gems/2.3.0 directory.

¡Cualquier ayuda será apreciada!

Derek
fuente
Puede intentar instalar RVM e instalar una versión más reciente de ruby ​​como 2.3.3
Anton Skovorodko
Para el comentario 3: el paquete "python-software-properties" no está disponible, debe reemplazarlo por software-properties-common
Francisco Pedraza
1
La opción RVM, y en mi humilde opinión, una instalación aún mejor y simple como una "instalación de usuario" pura (a diferencia de una global, que exige derechos) podría ser mucho mejor que jugar con los derechos.
Frank Nocke
8
Desearía que esta secuencia explicara por qué este OP tenía este problema y por qué deberían abandonar una versión de Ruby a favor de Ruby y un administrador de instalación múltiple (RVM o RBEVN). No puedo decir con certeza si el consejo aquí se basa únicamente en preferencias personales. Espero que haya más detrás de este consejo.
BaldEagle

Respuestas:

153

Primero debe desinstalar el ruby ​​instalado por Ubuntu con algo como sudo apt-get remove ruby.

Luego reinstale ruby ​​usando rbenv y ruby-build de acuerdo con sus documentos:

cd $HOME
sudo apt-get update 
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.3.1
rbenv global 2.3.1
ruby -v

El último paso es instalar Bundler:

gem install bundler
rbenv rehash

¡Entonces disfruta!

Derek

Derek
fuente
8
La instrucción sobre cómo instalar ruby ​​(en rieles) está aquí gorails.com/setup/ubuntu/16.04
Andrzej Rehmann
5
Soy un poco reticente a realizar la desinstalación, ya que también requiere desinstalar programas dependientes ( vim-gnomepor ejemplo). Supongo que preferiría saber por qué, en primer lugar, necesita escribir /var/lib/...para la instalación de un usuario ... ¿Hice una sudo gem installcuando no es necesario?
PlasmaBinturong
4
Estoy de acuerdo con @AntonSkovorodko, sería bueno si la respuesta pudiera justificar la desinstalación de Ruby
blong
4
Solo tenga cuidado al desinstalar Ruby en el entorno Cinnamon (sucedió en Linux Mint 18.2), después de reiniciar no pude ejecutar el sistema en modo gráfico. Cuando esto le suceda, vaya a CLI a través Ctrl+Alt+F1y ejecute los siguientes comandos (desinstala e instala Cinnamon nuevamente): sudo apt purge cinnamon && sudo apt install cinnamon
Kout
2
a medida que esta respuesta envejece, probablemente querrá saber cuáles son las últimas disponibles: rbenv install -lpara obtener una lista de todas las versiones disponibles, luego rbenv install 2.5.1para la versión 2.5.1 o la que desee.
Paul Sturm
60

Si desea utilizar la distribución Ruby en lugar de rb-env / rvm, puede configurar una GEM_HOMEpara su usuario actual. Empiece creando un directorio para almacenar las gemas Ruby para su usuario:

$ mkdir ~/.ruby

Luego actualice su shell para usar ese directorio GEM_HOMEy actualice su PATHvariable para incluir el directorio bin de Ruby gem.

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc

(Esa última línea recargará las variables de entorno en su shell actual).

Ahora debería poder instalar Ruby gems bajo su usuario usando el gemcomando. Pude hacer que esto funcionara con Ruby 2.5.1 en Ubuntu 18.04. Si está utilizando un shell que no es Bash, deberá editar el script de inicio para ese shell en lugar de bashrc.

James
fuente
2
Hice esto, luego recibí un error sobre "no puedo encontrar archivos de encabezado para ruby", luego leí esto: stackoverflow.com/a/4502672/2245874 , y no lo seguí todo, pero hice sudo apt install ruby -gemas, y luego funcionó para mí.
robm
1
Creo que @robm significa ruby-dev, no ruby-gems
Altreus
3
Esto probablemente sea más apropiado para los usuarios de ruby ​​que no necesitan desarrollar en múltiples versiones.
danielcooperxyz
1
Describiste una forma de Linux realmente buena para arreglar mi instalación de ruby ​​sin herramientas adicionales, solo un buen bash :)
Denis Trofimov
30

(Enero de 2019) Para instalar Ruby usando el script Rbenv, siga estos pasos:

1. Primero, actualice el índice de paquetes e instale los paquetes necesarios para que la herramienta ruby-build compile Ruby desde la fuente:

sudo apt-get remove ruby
sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

2. A continuación, ejecute el siguiente comando curl para instalar tanto rbenv como ruby-build:

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

3. Agregue $ HOME / .rbenv / bin a la RUTA del sistema.

Si está utilizando Bash, ejecute:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

Si está utilizando Zsh, ejecute:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

4. Instale la última versión estable de Ruby y configúrela como versión predeterminada con:

rbenv install 2.5.1
rbenv global 2.5.1

Para enumerar todas las versiones de Ruby disponibles, puede usar: rbenv install -l

5. Verifique que Ruby se haya instalado correctamente imprimiendo el número de versión:

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

FUENTE: Cómo instalar Ruby en Ubuntu 18.04

EDITAR: Instalar rubygems:

sudo apt-get install rubygems
Achraf JEDAY
fuente
2
¡esto es genial! agradable y conciso. Lo seguí exactamente (excepto los .zshrccambios que hice a mano) y funcionó a la perfección. De la misma manera que agregó cómo instalar rubygems, sugeriría tal vez añadiendo la forma de actualizar más adelante la versión instalada de rubí (supongo que acaba de ejecutar las rbenv instally los rbenv globalcomandos de nuevo y tal vez rbenv uninstallpara podar versiones no actualizadas)
gMale
1
¡Esto es increíble! Funciona perfectamente en Ubuntu 18.04 WSL.
robe007
1
Esta es una respuesta más elegante.
rashedcs
14

En lugar de cambiar de propietario, lo que podría bloquear a otros usuarios locales, o, algún día, a su propio servidor ruby ​​/ cosas de implementación ... ejecutándose con un usuario diferente ...

Preferiría simplemente extender los derechos de esa carpeta en particular a ... bueno, a todos:

cd /var/lib
sudo chmod -R a+w gems/

(También encontré su error. Así que esto está bastante verificado).

Frank Nocke
fuente
1
También necesitaba dirigirme a la carpeta / usr / local / bin, pero esta solución funcionó: "ERROR: al ejecutar gem ... (Gem :: FilePermissionError) No tiene permisos de escritura para el directorio / usr / local / bin . "
eb80
10

Intente usar chown -Ren el var/lib/gemsdirectorio, asignando propiedad al usuario [ rubyusername] en este ejemplo, el usuario que instalará y desarrollará con gems.

 # chown -R rubyusername:rubyusername /var/lib/gems 

Esto cambia todo de forma recursiva en el directorio de gemas . Para mayor seguridad en sistemas multiusuario, también puede crear un grupo, en lugar de seleccionar el nombre de usuario ruby ​​individual, y agregar usuarios a ese grupo.

pececillo
fuente
2
Puede resolver ese problema, pero aparece otro problema: ERROR: mientras se ejecuta gem ... (Gem :: FilePermissionError) No tiene permisos de escritura para el directorio / usr / local / bin; así que supongo que algo más está mal en lugar del permiso.
Derek
3

Sobre la base de la respuesta anterior de derek, generalmente no se recomienda utilizar la instancia de Ruby proporcionada por el sistema para su propio trabajo de desarrollo, ya que las herramientas del sistema pueden depender de la versión o ubicación particular de la instalación de Ruby. De manera similar a esta respuesta para Mac OSX , querrá seguir las instrucciones de derek sobre el uso de algo como rbenv ( RVM es una alternativa similar) para instalar su propia instancia de Ruby.

Sin embargo, no es necesario desinstalar la versión del sistema de Ruby, las instrucciones de instalación de rbenv proporcionan un mecanismo para asegurarse de que la instancia de Ruby disponible en su shell sea la instancia de rbenv, no la instancia del sistema. Este es el

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

línea en la respuesta de derek.

Sean Ray
fuente
2

Encontré el mismo error en Acciones de GitHub. Agregar sudoresolvió el problema.

sudo gem install bundler
Kolappan N
fuente
0

Reinstalar Compass funcionó para mí ... ¡Es una magia!

sudo gem install -n /usr/local/bin compass
Haje
fuente
0

Ubuntu 20.04:

Opción 1: configure un directorio de instalación de gemas para su cuenta de usuario

Para bash (para zsh, usaríamos por .zshrcsupuesto)

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Opción 2: usar snap

Desinstale apt-version ( ruby-full) y vuelva a instalarlo consnap

sudo apt-get remove ruby
sudo snap install ruby --classic
schnatterer
fuente