web-dev-qa-db-fra.com

Comment réinstaller une gemme en utilisant bundler

J'ai fait un bundle show et obtenez le chemin complet vers un répertoire gem.

Malheureusement, j'ai supprimé le répertoire en utilisant rm -r gem_path. Ensuite, ma Rails ne fonctionne plus. Si je tente de démarrer le serveur ou de démarrer Rails affiche le message d'erreur suivant:

<class:Application>: constante non initialisée MyAPP::Application::Gem (NameError)

Que dois-je faire pour le récupérer?

J'ai essayé bundle install ou bundle update _ dans l’espoir de forcer le groupe à rechercher la gemme et à l’installer à nouveau, mais cela n’a pas fonctionné.

J'ai aussi essayé de supprimer le Gemfile.lock et courir bundle install. Rien n'a changé, même erreur.

La gem en question est Agit comme identifiable sur .

56
waldyr.ar

J'ai d'abord fait un gem q --L, Le raccourci pour gem query --local. Il me produit tous les joyaux locaux 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 puis, suivant les conseils de DVG, j'ai désinstallé la gemme en utilisant son nom correct gem uninstall acts-as-taggable-on Et j'ai exécuté bundle install. Après cela, j'ai pu à nouveau Rails c Ou Rails s Sans aucun problème.

14
waldyr.ar

Si vous utilisez rbenv, cela vous permettra de désinstaller complètement et de réinstaller une gemme telle que rmagick:

Premièrement: essayez une simple désinstallation/réinstallation

gem uninstall rmagick
bundle install

Si cela ne fonctionne pas, vous pouvez supprimer toute trace de la gem installée. Trouvez l'emplacement de votre bijou:

bundle show rmagick
BUNDLE_DIR=$(dirname $(dirname $(bundle show rmagick)))
echo $BUNDLE_DIR

Votre préfixe d’installation de gemme sera par exemple celui par défaut. ~/.rbenv/versions/2.2.2/lib/Ruby/gems/2.2.0 ou quelque chose que vous définissez, par exemple .vendor

Effacer le répertoire de pierres précieuses:

rm -rf $BUNDLE_DIR/gems/rmagick-*

Effacez le cache de gem compilé:

rm $BUNDLE_DIR/cache/rmagick*.gem

Effacez également le cache de spécifications de l'associé:

rm $BUNDLE_DIR/specifications/rmagick*gemspec

Ensuite, vous pouvez réinstaller:

bundle install
53
werkshy

Vous pouvez toujours utiliser:

gem pristine acts-as-taggable-on

pristine - Restaure les gemmes installées à leur état d'origine à partir de fichiers situés dans le cache de gem

Si vous souhaitez simplement restaurer la gemme pour le projet actuel, vous devez exécuter:

bundle exec gem pristine acts-as-taggable-on

38
Calin

Depuis le répertoire du projet dans le terminal

gem uninstall gem_name 
11
Sazzad

Si vous utilisez RVM avec des gemmes dans ~/.rvm/, cela fonctionne si bundle ne réinstalle pas de gemme.

Tout d'abord, supprimez la source de gemme:

bundle show $GEM
rm -rf $PATH_TO_GEM

Effacez le cache de gem compilé:

rm -rf ~/.rvm/gems/Ruby-$RUBYVERSION[@$GEMSET]/cache/$GEM.gem

Effacez également le cache de spécifications de l'associé:

rm -rf ~/.rvm/gems/Ruby-$RUBYVERSION[@$GEMSET]/specifications/$GEM*gemspec

Ensuite, vous pouvez réinstaller:

bundle install
9
JosephL

Si vous avez installé dans ./bundle/vendor ou similaire, vous devez d'abord supprimer la gemme, mais spécifier explicitement GEM_HOME, par exemple.

GEM_HOME=./vendor/bundle/Ruby/2.3.0/ gem uninstall rmagick

C'est de loin le moyen le plus simple de désinstaller des gems installés à l'aide de bundler dans un répertoire de fournisseurs. Idéalement, il y aurait une commande bundle uninstall ou bundle reinstall, etc.

Si votre objectif 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 que vous avez plusieurs applications Web dans 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
5
ioquatix

bundle exec gem uninstall <gem_name> - désinstalle Gem de l’ensemble (le <app_root>/vendor/bundle/Ruby/2.3.0/gems/ chemin). Ceci équivaut à la réponse donnée par @ioquatix, mais constitue la solution légèrement plus pratique qu'il recherchait.

gem uninstall <gem_name> - désinstaller gem uniquement à partir du gemset global du système

4
Magne

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'installeront pas non plus, car ils ne peuvent pas le désinstaller.

Si vous utilisez rvm, le plus simple semble être de faire un rvm reinstall 2.x.x. Au moins pour moi, rvm repair all n'a également pas aidé.

La même chose vaut probablement pour tous les autres joyaux par défaut. Je vais juste les énumérer ici pour que les googlers désespérés trouvent de l'aide:

  • bigdecimal
  • goutte
  • io-console
  • jSON
  • minitest
  • psych
  • râteau
  • rbtree
  • rdoc
  • unité de test
3
MattW.