Vous ne disposez pas des autorisations d'écriture pour le répertoire /var/lib/gems/2.3.0

104

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 fortement appréciée!

Derek
la source
Vous pouvez essayer d'installer RVM et installer une version plus récente de ruby ​​comme 2.3.3
Anton Skovorodko
Pour le commentaire 3: le paquet "python-software-properties" n'est pas disponible, vous devriez le remplacer pour software-properties-common
Francisco Pedraza
1
L'option RVM, et à mon avis une installation encore meilleure et simple en tant que pure «installation utilisateur» (par opposition à une installation globale exigeant des droits) pourrait être une bien meilleure chose à faire que de bricoler avec les droits!
Frank Nocke
8
Je souhaite que ce flux explique pourquoi cet OP a ce problème et pourquoi ils devraient abandonner une version de Ruby au profit à la fois de Ruby et d'un gestionnaire d'installation multiple (RVM ou RBEVN). Je ne peux pas dire avec certitude si les conseils ici sont uniquement basés sur des préférences personnelles. J'espère qu'il y a plus derrière ce conseil.
BaldEagle

Réponses:

154

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

Ensuite, réinstallez ruby ​​en utilisant rbenv et ruby-build en fonction de leurs documents:

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

La dernière étape consiste à installer Bundler:

gem install bundler
rbenv rehash

Alors profitez-en!

Derek

Derek
la source
8
Les instructions pour installer ruby ​​(sur rails) sont ici gorails.com/setup/ubuntu/16.04
Andrzej Rehmann
5
Je suis un peu réticent à faire la désinstallation, car elle nécessite également la désinstallation des programmes dépendants ( vim-gnomepar exemple). Je suppose que je préférerais savoir pourquoi, en premier lieu, il faut écrire /var/lib/...pour une installation utilisateur ... Ai-je fait une sudo gem installquand je n'en ai pas besoin?
PlasmaBinturong
4
Je suis d'accord avec @AntonSkovorodko, ce serait bien si la réponse pouvait justifier la désinstallation de Ruby
blong
4
Faites juste attention lors de la désinstallation de Ruby dans l'environnement Cinnamon (cela s'est produit sous Linux Mint 18.2), après le redémarrage, je ne pouvais pas exécuter le système en mode graphique. Lorsque cela vous arrive, accédez à la CLI via Ctrl+Alt+F1et exécutez les commandes suivantes (désinstalle et installe à nouveau Cinnamon): sudo apt purge cinnamon && sudo apt install cinnamon
Kout
2
à mesure que cette réponse vieillit, vous voudrez probablement savoir quelles sont les dernières disponibles: rbenv install -lpour une liste de toutes les versions disponibles puis rbenv install 2.5.1pour la version 2.5.1 ou ce que vous voudrez.
Paul Sturm
60

Si vous souhaitez utiliser la distribution Ruby au lieu de rb-env / rvm, vous pouvez configurer un GEM_HOMEpour 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_HOMEet pour mettre à jour votre PATHvariable pour inclure le répertoire bin de Ruby gem.

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

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

Vous devriez maintenant pouvoir installer des gemmes Ruby sous votre utilisateur à l'aide de la gemcommande. J'ai pu le faire fonctionner avec Ruby 2.5.1 sous Ubuntu 18.04. Si vous utilisez un shell qui n'est pas Bash, vous devrez modifier le script de démarrage de ce shell au lieu de bashrc.

James
la source
2
J'ai fait cela, puis j'ai eu une erreur sur "Impossible de trouver les fichiers d'en-tête pour ruby", puis j'ai lu ceci: stackoverflow.com/a/4502672/2245874 , et je n'ai pas tout suivi mais j'ai fait sudo apt installer ruby -gems, et puis ça a marché pour moi.
robm
1
Je crois que @robm signifiait ruby-dev pas ruby-gems
Altreus
3
Ceci est probablement plus approprié pour les utilisateurs de ruby ​​qui n'ont pas besoin de développer contre plusieurs versions.
danielcooperxyz
1
Vous avez décrit un très bon moyen Linux de réparer mon installation ruby ​​sans outils supplémentaires, juste un bon vieux bash :)
Denis Trofimov
30

(Janvier 2019) Pour installer Ruby à l'aide du script Rbenv, procédez comme suit:

1. Tout d'abord, mettez à jour l'index des packages et installez les packages requis pour que l'outil ruby-build puisse générer Ruby à partir des sources:

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. Ensuite, exécutez la commande curl suivante pour installer à la fois rbenv et ruby-build:

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

3. Ajoutez $ HOME / .rbenv / bin au PATH système.

Si vous utilisez Bash, exécutez:

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

Si vous utilisez Zsh exécutez:

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

4. Installez la dernière version stable de Ruby et définissez-la comme version par défaut avec:

rbenv install 2.5.1
rbenv global 2.5.1

Pour répertorier toutes les versions de Ruby disponibles, vous pouvez utiliser: rbenv install -l

5. Vérifiez que Ruby a été correctement installé en imprimant le numéro de version:

ruby -v

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

SOURCE: Comment installer Ruby sur Ubuntu 18.04

EDIT: Installez rubygems:

sudo apt-get install rubygems
Achraf JEDAY
la source
2
c'est bien! agréable et succinct. Je l'ai suivi exactement (sauf les .zshrcchangements que j'ai faits à la main) et cela a parfaitement fonctionné. De la même façon que vous avez ajouté comment installer rubygems, je vous suggère d' ajouter peut - être comment mettre à jour plus tard , la version Ruby installée (je devine que vous avez juste les rbenv installet rbenv globalcommandes à nouveau et peut - être rbenv uninstallélaguer versions obsolètes)
gMale
1
Ceci est incroyable! Fonctionne parfaitement sur Ubuntu 18.04 WSL.
robe007
1
C'est une réponse plus élégante.
rashedcs
14

Plutôt que de changer de propriétaire, ce qui pourrait verrouiller d'autres utilisateurs locaux, ou - un jour - votre propre serveur / déploiement-choses Ruby ... fonctionnant sous un autre utilisateur ...

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 également rencontré votre erreur. C'est donc assez vérifié.)

Frank Nocke
la source
1
J'avais également besoin d'adresser le dossier / usr / local / bin, mais cette solution a fonctionné: "ERREUR: lors de l'exécution de gem ... (Gem :: FilePermissionError) Vous ne disposez pas des autorisations d'écriture pour le répertoire / usr / local / bin . "
eb80
10

Essayez d'utiliser chown -Rsur le var/lib/gemsrépertoire, en attribuant la propriété à l'utilisateur [ rubyusername] dans cet exemple, l'utilisateur qui va installer et développer avec des gemmes.

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

Cela modifie tout de manière récursive dans le répertoire gems . Pour plus de sécurité sur les systèmes multi-utilisateurs, vous pouvez également créer un groupe, plutôt que de chown le nom d'utilisateur ruby ​​individuel, et ajouter des utilisateurs à ce groupe.

vairon
la source
2
Cela peut résoudre ce problème, mais un autre problème apparaît: ERREUR: lors de l'exécution de gem ... (Gem :: FilePermissionError) Vous ne disposez pas des autorisations d'écriture pour le répertoire / usr / local / bin; donc je suppose que quelque chose ne va pas au lieu de la permission.
derek
3

En s'appuyant sur la réponse de Derek ci-dessus, il n'est généralement pas recommandé d'utiliser l'instance Ruby fournie par le système pour votre propre travail de développement, car les outils système peuvent dépendre de la version ou de l'emplacement particulier de l'installation de Ruby. Semblable à 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 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 de rbenv, pas l'instance du système. C'est le

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

ligne dans la réponse de Derek.

Sean Ray
la source
2

J'ai rencontré la même erreur dans les actions GitHub. L'ajout a sudorésolu le problème.

sudo gem install bundler
Kolappan N
la source
0

Réinstaller Compass a fonctionné pour moi. C'est une magie!

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

Ubuntu 20.04:

Option 1 - configurer un répertoire d'installation de gem pour votre compte utilisateur

Pour bash (pour zsh, nous utiliserions .zshrcbien sûr)

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

Option 2 - utiliser Snap

Désinstallez apt-version ( ruby-full) et réinstallez-le avecsnap

sudo apt-get remove ruby
sudo snap install ruby --classic
schnatterer
la source