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éeMyAPP::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 .
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.
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
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
Depuis le répertoire du projet dans le terminal
gem uninstall gem_name
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
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
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
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: