Comment réinstaller un gem en utilisant bundler
j'ai fait un bundle show
et j'ai obtenu le chemin complet vers un répertoire gem.
malheureusement, j'ai supprimé le répertoire en utilisant rm -r gem_path
. Puis mon application rails ne fonctionne plus. Si j'essaie start server ou start rails console, il affiche l'erreur suivante:
<class:Application>
: constante non initialiséeMyAPP::Application::Gem
(NameError)
Que dois-je faire pour la récupérer?
j'ai essayé bundle install
ou bundle update
dans l'espoir de forcer le paquet pour rechercher la pierre précieuse et l'installer en arrière, mais n'a pas fonctionné.
j'ai aussi essayé de supprimer le Gemfile.lock
et de lancer bundle install
. Rien n'a changé, même erreur.
Le joyau en question est Agir en tant que tagable sur .
8 réponses
si vous utilisez rbenv, cela vous permettra de désinstaller complètement et de réinstaller un gem tel que rmagick:
tout D'abord: essayer une simple désinstallation / réinstallation
gem uninstall rmagick
bundle install
si cela ne fonctionne pas, vous pouvez supprimer toute trace de la gemme installée. Trouver votre emplacement d'installation de gemme:
bundle show rmagick
BUNDLE_DIR=$(dirname $(dirname $(bundle show rmagick)))
echo $BUNDLE_DIR
votre préfixe d'installation gem sera soit le préfixe par défaut par exemple ~/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0
ou quelque chose que vous définirez par exemple .vendor
supprimer le répertoire gem:
rm -rf $BUNDLE_DIR/gems/rmagick-*
effacer le cache gem compilé:
rm $BUNDLE_DIR/cache/rmagick*.gem
élimine également le cache de spécifications de bundler:
rm $BUNDLE_DIR/specifications/rmagick*gemspec
puis vous pouvez réinstaller:
bundle install
vous pouvez toujours utiliser:
gem pristine acts-as-taggable-on
immaculé-rétablit les gemmes installées à l'état immaculé à partir des fichiers situés dans la cache de gem
si vous voulez simplement restaurer la gemme pour le projet en cours, vous devez lancer:
bundle exec gem pristine acts-as-taggable-on
j'ai d'Abord fait un gem q --L
, le raccourci pour gem query --local
. Il me sort tous les gemmes locales installés.
actionmailer (3.2.8, 3.2.6, 3.2.1, 3.1.0)
actionpack (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activemodel (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activerecord (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activeresource (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activesupport (3.2.8, 3.2.6, 3.2.1, 3.1.0)
acts-as-taggable-on (2.3.3)
...
et ensuite, suivant les conseils de DVG, j'ai désinstallé le gem en utilisant son nom correct gem uninstall acts-as-taggable-on
et j'ai couru bundle install
. Après cela j'ai pu rails c
ou rails s
encore une fois sans aucun problème.
si vous utilisez RVM avec des gemmes dans ~/.rvm/
, cela fonctionne si bundle
n'est pas la réinstallation d'une gemme.
premièrement, supprimer la source gem:
bundle show $GEM
rm -rf $PATH_TO_GEM
effacer le cache gem compilé:
rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/cache/$GEM.gem
élimine également le cache de spécifications de bundler:
rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/specifications/$GEM*gemspec
puis vous pouvez réinstaller:
bundle install
de l'annuaire du projet dans le terminal
gem uninstall gem_name
si vous avez installé dans ./bundle/vendor
ou similaire, vous devez supprimer le gem en premier mais spécifier explicitement le GEM_HOME, par exemple
GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick
C'est de loin la manière la plus simple de désinstaller les gemmes installées en utilisant bundler dans un répertoire de fournisseurs. Idéalement, il y aurait une commande bundle uninstall
ou bundle reinstall
, etc.
si votre but est simplement de réinstaller, la commande suivante vous aidera:
GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick && sudo -u http bundle install
si vous êtes comme moi et avez plusieurs applications web sous un répertoire (par exemple /srv/http
), ce qui suit le fait dans tous les répertoires:
cd /srv/http
for d in ./*/ ; do (cd "$d" && sudo -u http GEM_HOME=./vendor/bundle/ruby/2.4.0/ gem uninstall --force rmagick && sudo -u http bundle install); done
si vous essayez de réinstaller rake, gem pristine rake
échouera avec Skipped rake-10.X.X, it is a default gem
et bundle ne l'installera pas non plus, parce qu'il ne peut pas le désinstaller.
si vous utilisez rvm, il semble que le plus facile était simplement de faire un rvm reinstall 2.x.x
. Au moins pour moi, rvm repair all
n'a pas aidé.
il en va probablement de même pour tous les autres gemmes par défaut. Je vais juste les énumérer ici pour que les googleurs désespérés trouvent de l'aide:
- bigdecimal
- goutte
- io-console
- json
- minitest
- psy
- râteau
- rbtree
- rdoc
- unité d'essai
bundle exec gem uninstall <gem_name>
- désinstaller gem du faisceau (le chemin <app_root>/vendor/bundle/ruby/2.3.0/gems/
). C'est l'équivalent de la réponse @ioquatix a donné, mais est légèrement plus commode solution qu'il cherchait.
gem uninstall <gem_name>
- désinstalle gem seulement à partir de la global sertie dans le système