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ée MyAPP::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 .

47
demandé sur waldyr.ar 2012-08-30 05:44:59

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
41
répondu werkshy 2016-05-17 20:04:36

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

36
répondu Calin 2015-06-29 11:30:22

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.

13
répondu waldyr.ar 2012-08-31 01:50:23

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
9
répondu JosephL 2014-06-18 03:22:22

de l'annuaire du projet dans le terminal

gem uninstall gem_name 
9
répondu Sazzad 2015-01-12 03:57:01

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
4
répondu ioquatix 2017-02-12 12:21:07

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
3
répondu MattW. 2015-12-01 16:38:24

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

2
répondu Magne 2018-01-04 11:16:39