web-dev-qa-db-fra.com

Pourquoi ai-je une erreur "autorisation refusée" lors de l'installation d'une gemme?

Je tente d'installer Jekyll. Après avoir exécuté gem install jekyll, J'obtiens cette erreur:

ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied - /usr/local/lib/Ruby/gems/2.0.0/gems/jekyll-1.0.3/CONTRIBUTING.md

Je peux voir que Jekyll est installé lorsque je lance gem list, Alors je suis complètement confus:

*** LOCAL GEMS ***

bigdecimal (1.2.0)
classifier (1.3.3)
colorator (0.1)
commander (4.1.3)
directory_watcher (1.4.1)
fast-stemmer (1.0.2)
highline (1.6.19)
io-console (0.4.2)
jekyll (1.0.3)
json (1.7.7)
kramdown (1.0.2)
liquid (2.5.0)
maruku (0.6.1)
minitest (4.3.2)
posix-spawn (0.3.6)
psych (2.0.0)
pygments.rb (0.5.1)
rake (0.9.6)
rdoc (4.0.0)
rubygems-update (2.0.3)
safe_yaml (0.7.1)
syntax (1.0.0)
test-unit (2.0.0.0)
yajl-Ruby (1.1.0)

J'ai eu beaucoup de problèmes avec mes chemins d'utilisateur dans le passé, alors je me demande si cette erreur pourrait avoir quelque chose à voir avec ça?

Voici la sortie de gem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.3
  - Ruby VERSION: 2.0.0 (2013-02-24 patchlevel 0) [x86_64-darwin12.3.0]
  - INSTALLATION DIRECTORY: /usr/local/Cellar/Ruby/2.0.0-p0/lib/Ruby/gems/2.0.0
  - Ruby EXECUTABLE: /usr/local/Cellar/Ruby/2.0.0-p0/bin/Ruby
  - EXECUTABLE DIRECTORY: /usr/local/Cellar/Ruby/2.0.0-p0/bin
  - RUBYGEMS PLATFORMS:
    - Ruby
    - x86_64-darwin-12
  - GEM PATHS:
     - /usr/local/Cellar/Ruby/2.0.0-p0/lib/Ruby/gems/2.0.0
     - /Users/me/.gem/Ruby/2.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/

Voici mon ".bash_profile":

export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a Shell session *as a function*
PATH=$PATH:above/path/to/gems

source ~/.rvm/scripts/rvm

Est-ce que quelqu'un pourrait m'aider à faire installer Jekyll ou au moins à surmonter cette erreur d'autorisations?

46
okTalk

Votre Ruby est installé dans /usr/local/Cellar/Ruby/....

Ce chemin est restreint et ne peut être écrit que lorsque vous utilisez des privilèges élevés, soit en vous exécutant en tant que root, soit en utilisant Sudo. Je ne vous recommanderai pas de lancer les choses en tant que root car vous ne comprenez pas comment fonctionnent les chemins d'accès et les autorisations. Vous pouvez utiliser Sudo gem install jekyll, qui élèvera temporairement vos autorisations, donnant à votre commande les droits nécessaires pour écrire dans ce répertoire.

Cependant, je vous recommanderais de réfléchir sérieusement à NE PAS faire cela et d'utiliser plutôt votre RVM pour installer Ruby dans votre propre répertoire personnel, où vous pourrez automatiquement installer Rubies et gems. Voir les instructions pour l’installation dans un sandbox RVM local sous " installations mono-utilisateur ".

Parce que vous avez RVM dans votre ~/.bash_profile, mais cela n'apparaît pas dans votre liste d'environnements Gem, je suppose que vous n'avez pas suivi les instructions pour installer RVM correctement ou que vous n'avez pas utilisé la commande essentielle:

rvm use 2.0.0 --default

configurer un Ruby par défaut.

Pour la plupart des utilisateurs, "l'installation mono-utilisateur" est la voie à suivre. Si vous devez utiliser Sudo avec cette configuration, vous avez commis une erreur.

65
the Tin Man

Je voulais partager les étapes que j'ai suivies qui ont résolu ce problème pour moi dans l'espoir que cela puisse aider quelqu'un d'autre (et aussi comme rappel pour moi au cas où une telle situation se reproduirait)

Les problèmes que j'avais (qui étaient les mêmes que ceux de OP) peuvent être liés à l'utilisation de homebrew pour installer Ruby.

Pour résoudre ce problème, j'ai d'abord mis à jour homebrew:

brew update && brew upgrade
brew doctor

(Si le médecin brasseur pose des problèmes, corrigez-les d'abord.) Ensuite, j'ai désinstallé Ruby.

brew uninstall Ruby

Si rbenv est [~ # ~] et non [~ # ~] installé à ce stade, alors

brew install rbenv
brew install Ruby-build
echo 'export RBENV_ROOT=/usr/local/var/rbenv' >> ~/.bash_profile
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile

Ensuite, j'ai utilisé rbenv pour installer Ruby. Tout d'abord, trouvez la version souhaitée:

rbenv install -l

Installer cette version (par exemple 2.2.2)

rbenv install 2.2.2

Puis définissez la version globale sur la version souhaitée Ruby:

rbenv global 2.2.2

À ce stade, vous devriez voir la version souhaitée définie pour les commandes suivantes:

rbenv versions

et

Ruby --version

Vous devriez maintenant pouvoir installer bundler:

gem install bundler

Et une fois dans le dossier du projet souhaité, vous pouvez installer tous les gems requis:

bundle
bundle install
45
Mike Lane

Cela ressemble à un problème d'autorisations. C'est ce qui a fonctionné pour moi

Sudo chown -R $(whoami) /Library/Ruby/Gems/*

ou dans votre cas

Sudo chown -R $(whoami) /usr/local/lib/Ruby/gems/2.0.0/gems/
13
Bryan Norden

Après avoir défini le répertoire gems sur le répertoire utilisateur qui exécute le gem install en utilisant export GEM_HOME=/home/<user>/gems le problème a été résolu.

6
030

J'ai eu le même problème en utilisant rvm sur Ubuntu, a été corrigé en réglant le source sur mon terminal comme solution à court terme:

source $HOME/.rvm/scripts/rvm

ou

source /home/$USER/.rvm/scripts/rvm

et configurer une valeur par défaut Ruby Version, 2.3.3 dans mon cas.

rvm use 2.3.3 --default


Et une solution à long terme consiste à ajouter votre source à votre .bashrc fichier dans définitivement faire en sorte que Ubuntu regarde dans .rvm pour tous les fichiers Ruby.

Ajouter:

source .rvm/scripts/rvm

dans

$HOME/.bashrc fichier.

3
David Ben Dahan

Installez rbenv ou rvm en tant que Ruby (je préfère rbenv) via homebrew (c.-à-d. brew update & brew install rbenv) mais alors par exemple dans le cas de rbenv, assurez-vous d’ajouter rbenv à votre $ PATH comme indiqué ici et ici .

Pour une explication plus détaillée sur le fonctionnement de rbenv, je recommande this .

0
urubuz