131 votes

Vous n'avez pas les droits d'écriture pour le répertoire /var/lib/gems/2.3.0

J'ai installé ruby sur mon 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.

Toute aide sera grandement appréciée !

0 votes

Vous pouvez essayer d'installer RVM et d'installer une version plus récente de ruby comme 2.3.3.

0 votes

Pour le commentaire 3 : le paquet "python-software-properties" n'est pas disponible vous devez le remplacer par software-properties-common

1 votes

L'option RVM, et à mon avis encore meilleure&simple installation en tant que pure "installation utilisateur". (par opposition à un système global, exigeant des droits) pourrait être une bien meilleure chose que de bricoler des droits !

179voto

derek Points 2245

Vous devez d'abord désinstaller le ruby installé par Ubuntu avec quelque chose comme sudo apt-get remove ruby .

Puis réinstaller ruby en utilisant rbenv et ruby-build selon leurs docs :

cd $HOME
sudo apt-get update
sudo apt install curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install git-core zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev nodejs yarn

Nous allons maintenant installer rbenv (recommandé, voir docs )

cd
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 3.0.1
rbenv global 3.0.1
ruby -v

La dernière étape consiste à installer Bundler :

gem install bundler
rbenv rehash

Ensuite, profitez-en !

Derek

Mise à jour : Cette réponse a été mise à jour et testé avec succès sur Ubuntu 20.04.

11 votes

Les instructions pour installer ruby (on rails) sont ici gorails.com/setup/ubuntu/16.04

7 votes

Je suis un peu réticent à faire la désinstallation, puisqu'il faut aussi désinstaller les programmes dépendants ( vim-gnome par exemple). Je suppose que je préférerais savoir pourquoi en premier lieu, il doit écrire dans /var/lib/... pour une installation utilisateur... Est-ce que j'ai fait un sudo gem install lorsque cela n'est pas nécessaire ?

5 votes

Je suis d'accord avec @AntonSkovorodko, ce serait bien si la réponse pouvait justifier la désinstallation de Ruby.

79voto

James Points 378

Si vous souhaitez utiliser la distribution Ruby au lieu de rb-env/rvm, vous pouvez mettre en place un fichier de type GEM_HOME pour votre utilisateur actuel. Commencez par créer un répertoire pour stocker les gemmes Ruby pour votre utilisateur :

$ mkdir ~/.ruby

Ensuite, mettez à jour votre shell pour utiliser ce répertoire pour GEM_HOME et de mettre à jour votre PATH pour inclure le répertoire bin des gemmes Ruby.

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

(Cette dernière ligne va recharger les variables d'environnement dans votre shell actuel).

Maintenant, vous devriez être en mesure d'installer les gemmes Ruby sous votre utilisateur en utilisant la commande gem commande. J'ai réussi à le faire fonctionner avec Ruby 2.5.1 sous Ubuntu 18.04. Si vous utilisez un shell qui n'est pas Bash, alors vous devrez modifier le script de démarrage pour ce shell au lieu de bashrc .

3 votes

J'ai fait cela, puis j'ai eu une erreur à propos de "can't find header files for ruby", puis j'ai lu ceci : stackoverflow.com/a/4502672/2245874 Je n'ai pas tout suivi, mais j'ai fait sudo apt install ruby-gems, et ça a marché pour moi.

2 votes

Je crois que @robm voulait dire ruby-dev et non ruby-gems.

4 votes

Ceci est probablement plus approprié pour les utilisateurs de ruby qui n'ont pas besoin de développer contre plusieurs versions.

17voto

Fronker Points 658

Plutôt que de changer de propriétaire, ce qui pourrait bloquer les autres utilisateurs locaux, ou -un jour- votre propre serveur ruby/choses de déploiement... fonctionnant sous un utilisateur différent...

Je préférerais simplement étendre les droits de ce dossier particulier à... eh bien, à tout le monde :

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

(J'ai aussi rencontré votre erreur, donc c'est assez vérifié).

2 votes

Je devais également m'adresser au dossier /usr/local/bin, mais cette solution a fonctionné : "ERROR : While executing gem ... (Gem::FilePermissionError) Vous n'avez pas les droits d'écriture pour le répertoire /usr/local/bin".

10voto

minnow Points 105

Essayez d'utiliser chown -R sur le var/lib/gems en attribuant la propriété à l'utilisateur [ rubyusername ] dans cet exemple, l'utilisateur qui va installer et développer avec les gems.

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

Ce site récursivement change tout sous le pierres précieuses répertoire. Pour une sécurité supplémentaire sur les systèmes multi-utilisateurs, vous pouvez également créer un groupe, plutôt que de chowning le rubyusername individuel, et ajouter des utilisateurs à ce groupe.

2 votes

Il peut résoudre ce problème, mais un autre problème surgit : ERROR : While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/local/bin directory ; donc je suppose qu'il y a un autre problème que la permission.

0 votes

Je reçois d'autres erreurs plus tard ERROR : Échec de la construction de l'extension native de la gemme.

3voto

Sean Ray Points 315

Dans le prolongement de la réponse de derek ci-dessus, il n'est généralement pas recommandé d'utiliser l'instance de Ruby fournie par le système pour votre propre travail de développement, car les outils du système peuvent dépendre de la version particulière ou de l'emplacement de l'installation de Ruby. Comme pour cette réponse pour Mac OSX vous voudrez suivre les instructions de Derek sur l'utilisation de quelque chose comme rbenv ( RVM est une alternative similaire) pour installer votre propre instance de Ruby.

Cependant, il n'est pas nécessaire de désinstaller la version système de Ruby, les instructions d'installation de rbenv fournissent un mécanisme pour s'assurer que l'instance de Ruby disponible dans votre shell est l'instance rbenv, et non l'instance système. C'est le

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

ligne dans la réponse de Derek.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X