J'ai installé toutes mes gemmes en utilisant bundler via le Gemfile. J'ai pensé (à tort) que si je supprimais une gemme de mon Gemfile et exécutais 'l'installation en bundle', les gems supprimés seraient désinstallés. J'ai consulté le fichier d'aide de l'offre groupée et, pour autant que je sache, aucun moyen de désinstaller Gems n'a été trouvé.
Dois-je simplement utiliser gem uninstall x pour tout? Est-ce que cela va confondre bundler?
Bundler est lancé à partir du répertoire racine de votre application, il s'assure ainsi que toutes les gemmes nécessaires sont présents pour que votre application fonctionne. Si, pour une raison quelconque, vous n'avez plus besoin d'une gemme, vous devrez exécuter le
gem uninstall gem_name
comme vous l'avez dit plus haut. Chaque fois que vous lancez un paquet, il vérifie de nouveau les dépendances.
EDIT - 24.12.2014
Je vois que les gens continuent à venir à cette question, j'ai décidé d'ajouter un petit quelque chose. La réponse que j'ai donnée concernait le cas où vous maintenez vos joyaux globaux. Pensez à utiliser un gestionnaire de gemmes tel que rbenv ou rvm pour conserver des ensembles de gemmes étendus à des projets spécifiques.
Cela signifie qu'aucune gemme ne sera installée au niveau mondial. Par conséquent, lorsque vous en supprimez une du fichier Gemfile de votre projet et que vous l'exécutez à nouveau, elle ne sera évidemment pas chargée dans votre projet. Ensuite, vous pouvez lancer bundle clean (avec le répertoire du projet) et il supprimera du système toutes les gemmes qui ont été installées une fois à partir de votre Gemfile (dans le même répertoire) mais qui ne sont plus répertoriées ici .... longue histoire courte - il supprime les gemmes non utilisées.
Cela désinstallera une gemme installée par bundler:
bundle exec gem uninstall GEM_NAME
Notez que cela jette
ERREUR: lors de l'exécution de gem ... (NoMethodError), méthode non définie `delete 'pour # <Bundler :: SpecSet: 0x00000101142268>
mais la gemme est effectivement enlevée. La prochaine fois que vous exécutez bundle install
la gemme sera réinstallée.
Avec les nouvelles versions de bundler, vous pouvez utiliser la tâche de nettoyage:
$ bundle help clean
Usage:
bundle clean
Options:
[--dry-run=only print out changes, do not actually clean gems]
[--force=forces clean even if --path is not set]
[--no-color=Disable colorization in output]
-V, [--verbose=Enable verbose output mode]
Cleans up unused gems in your bundler directory
$ bundle clean --dry-run --force
Would have removed actionmailer (3.1.12)
Would have removed actionmailer (3.2.0.rc2)
Would have removed actionpack (3.1.12)
Would have removed actionpack (3.2.0.rc2)
Would have removed activemodel (3.1.12)
...
modifier:
Ceci n’est pas recommandé si vous utilisez un gemset global (c’est-à-dire que tous vos projets conservent leurs gemmes au même endroit). Il y a peu de façons de garder les joyaux de chaque projet séparés, cependant:
rvm
gemsets ( http://rvm.io/gemsets/basics )bundle install
avec l’une des options suivantes: --deployment
ou --path=<path>
( http://bundler.io/v1.3/man/bundle-install.1.html )Vous devez utiliser 'gem uninstall gem_name' pour désinstaller une gemme.
Notez que si vous avez installé la gem à l'échelle du système (c'est-à-dire l'installation de l'ensemble Sudo), vous devrez peut-être spécifier le répertoire binaire à l'aide de l'option -n, afin de vous assurer que les binaires appartenant à la gem sont supprimés. Par exemple
Sudo gem uninstall gem_name -n /usr/lib/Ruby/gems/1.9.1/bin
Si vous voulez nettoyer toutes vos pierres précieuses et recommencer
Sudo gem clean
J'ai semblé résoudre ce problème en supprimant manuellement le bijou Unicorn via bundler ("Sudo bundler exec gem désinstaller Unicorn"), puis en le reconduisant ("installation de bundle Sudo").
Je ne sais pas pourquoi c'est arrivé, bien que le correctif ci-dessus semble fonctionner.
Bundler a maintenant un bundle remove GEM_NAME
commande (depuis v1.17.0, 25 octobre 2018 ).