J'exécute la commande
bundle install
dans un dossier de projet. Dans certains dossiers de projet, il produira une erreur et dans d'autres dossiers de projet, il ne produira pas d'erreur. L'erreur est:
Votre compte utilisateur n'est pas autorisé à installer sur le système RubyGems
Je sais que cela peut être résolu en suivant les conseils recommandés:
bundle install --path vendor/bundle
Ma question est pourquoi le comportement est-il incohérent?
Dans mon cas, j'ai résolu de faire exactement ce que le message d'erreur suggère:
Votre compte d'utilisateur n'est pas autorisé à installer sur le système RubyGems. Vous pouvez annuler cette installation et exécuter: Bundle install --path vendor/bundle pour installer les gemmes dans ./vendor/bundle/
Donc, au lieu de:
bundle install
Iran:
bundle install --path vendor/bundle
C'était la solution pour ce type .
L'inconvénient de cette solution est qu'elle crée un dossier vendor
dans le dossier actuel, qui peut être ajouté à .gitignore
s'il s'agit de distribuer l'application via Git.
Habituellement, si vous utilisez RVM, rbenv ou chruby pour installer Ruby, toutes les gemmes seront installées dans votre dossier personnel sous ~/.rbenv/Ruby-version/...
Si vous utilisez votre système Ruby cependant (celui qui est installé par défaut) les gemmes sont installées à côté de lui dans un emplacement auquel vous n'avez pas accès sans Sudo
.
Je suppose que votre gestionnaire de versions utilise par défaut le système Ruby mais certains de vos projets contiennent un fichier .Ruby-version qui lui indique d'utiliser une version différente de Ruby auquel vous avez accès.
Le problème, au moins pour moi, était que le bundler lui-même n'était pas installé dans ma version rbenv Ruby. Même si le bundler existait et semblait utilisable ... sauf l'erreur d'autorisation.
L'une des choses qui m'a permis de comprendre était que sur la ligne de commande elle-même, je pouvais installer des gemmes correctement et ne pas recevoir le message d'erreur. J'ai fait cela pendant un certain temps comme solution de contournement jusqu'à ce que je décide de résoudre le problème de manière permanente, comme indiqué ci-dessous:
Pour le réparer, j'ai fait:
rbenv local 2.5.0 # Make sure I'm using a local version that exists
gem list | grep bundler # Note no output! Need to fix that!
gem install bundler
rbenv rehash
bundle (within my project that has a Gem file)
Utilisation de RVM:
Vous devez installer rvm
pour votre utilisateur unique ( utilisateur standard/non root ), dans votre $HOME
répertoire (il n'est pas installé si vous n'avez pas /home/youruser/.rvm
répertoire.
Comme spécifié sur le site rvm dans la section "Emplacement d'installation pour un seul utilisateur: ~/.rvm /", pour installer rvm
pour une exécution mono-utilisateur:
cd
\curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles
Maintenant, rvm
doit être installé. Comme dans une autre invite, actualisez rvm
(avec votre nom d'utilisateur fourni):
source /home/---YOURUSERNAME---/.rvm/scripts/rvm
Pour empêcher les invites d'installation des packages Sudo-need, exécutez:
rvm autolibs disable
Vous pouvez installer Ruby pour votre utilisateur uniquement, dans la version 2.5 (ou toute autre, répertoriée dans rvm list known
)
rvm install 2.5
Explication:
Vous essayez probablement d'installer rvm en utilisant Sudo
et peut-être avec ce paquet pour ubunt mais vous n'avez pas les permissions Sudo.
Cette invite vous indique que vous ne pouvez pas regrouper des gemmes à l'échelle mondiale pour l'ensemble du système, ce qui peut être bon pour votre machine privée, mais pas pour votre utilisateur d'entreprise (machine), qui est souvent administré par quelqu'un d'autre.
Si rvm sera installé dans votre $HOME
les gemmes y seront regroupées, comme d'habitude.
Le comportement peut être incohérent car d'autres utilisateurs ont rvm
installé dans leur $HOME
répertoire
Dans mon cas, j'avais un $BUNDLE_PATH
sans suffisamment d'autorisations à l'utilisateur du bundler pour écrire.
Your user account isn't allowed to install to the system RubyGems
bundle install --path vendor/bundle
Récemment fait face au même problème. J'utilise rvm
Sudo chown -R $USER ~/.rvm
m'a aidé