web-dev-qa-db-fra.com

Quel est le meilleur moyen de désinstaller les gems d'un projet Rails3?

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?

96
lashleigh

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.

133
Daniel

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.

96
phatmann

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:

  1. rvm gemsets ( http://rvm.io/gemsets/basics )
  2. bundle install avec l’une des options suivantes: --deployment ou --path=<path> ( http://bundler.io/v1.3/man/bundle-install.1.html )
21
Evgenia Manolova

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
1
Declan McGrath

Si vous voulez nettoyer toutes vos pierres précieuses et recommencer

Sudo gem clean
1
Douglas G. Allen

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.

1
Aaron Marks

Bundler a maintenant un bundle remove GEM_NAME commande (depuis v1.17.0, 25 octobre 2018 ).

0
Delena Malan