web-dev-qa-db-fra.com

rails bundle clean

Après la mise à jour d'un ensemble, certaines gemmes peuvent être obsolètes, car une version plus récente de cette gemme a été installée. Une telle commande n'existe pas sous l'exécutable bundle, c'est-à-dire bundle clean. Comment se débarrasser de ces joyaux obsolètes?

Ceci est une tentative de réduction de la taille du slug dans mon Rails app.

85
iGbanam

Si vous utilisez Bundler 1.1 ou une version ultérieure, vous pouvez utiliser bundle clean, comme vous l’imaginiez. Ceci est redondant si vous utilisez bundle install --path (Bundler gère l’emplacement que vous avez spécifié avec --path, il est donc responsable de la suppression des gems obsolètes), mais si vous avez utilisé Bundler pour installer les gems en tant que gems système, alors bundle clean --force supprime tous les gems système non requis par votre Gemfile. Mise en garde aveuglante: ne faites pas cela si vous avez d'autres applications qui s'appuient sur des gemmes système qui ne figurent pas dans votre Gemfile!

Pat Shaughnessy a une bonne description de bundle clean et d’autres nouveaux ajouts dans l’atelier de regroupement 1.1 .

126
David Waller

Si vous utilisez RVM, vous pouvez utiliser rvm gemset empty pour le gemset actuel - cette commande supprimera toutes les gemmes installées sur le gemset actuel (le gemset lui-même restera en place). Puis lancez bundle install afin d’installer les versions actuelles de gems. Veillez également à ne pas supprimer les gemmes générales telles que rake, bundler, etc., pendant rvm gemset empty _ (si c'est le cas, installez-les manuellement via gem install antérieur à bundle install).

36
trushkevich

Si vous utilisez RVM, vous pouvez installer vos pierres précieuses dans gemsets . Ainsi, lorsque vous souhaitez effectuer un nettoyage complet, vous pouvez simplement supprimer le gemset, qui à son tour supprime toutes les gemmes qui y sont installées. Votre autre option consiste simplement à désinstaller vos gems inutilisés et à réexécuter votre bundle install commande.

Comme bundler est censé être un outil de gestion de version de gem projet par projet, il ne fournit pas de fichier bundle clean commande. Cela signifierait également la possibilité de supprimer des gemmes associées à d'autres projets, ce qui n'est pas souhaitable. Cela signifie que le bundleur est probablement le mauvais outil à utiliser pour gérer votre répertoire gem. Ma recommandation personnelle serait d’utiliser des jeux de pierres angulaires RVM pour mettre en cache vos pierres précieuses dans certains projets ou dans les versions Ruby.

21
Pan Thomakos

Honnêtement, j’ai eu des problèmes avec les dépendances circulaires du paquetage et la meilleure façon de procéder est rm -rf .bundle. Epargnez-vous le mal de tête et utilisez simplement le marteau.

13
Tyler Brock

En cherchant une réponse à la même question, je suis tombé sur gem_unused .
Vous pouvez également lire cet article: http://chill.manilla.com/2012/12/31/clean-up-your-dirty-gemsets/
Le code source est disponible sur GitHub: https://github.com/apolzon/gem_unused

1
JJD

Je suppose que vous installez des gemmes dans vendor/bundle? Si c'est le cas, pourquoi ne pas simplement supprimer toutes les gemmes et effectuer un nettoyage propre bundle install?

1
Leonid Shevtsov

Supprimez simplement les gemmes obsolètes de votre Gemfile. Si vous parlez de Heroku (vous n'en avez pas parlé), le slug est compilé à chaque nouvelle version, en utilisant uniquement le contenu actuel de ce fichier.

0
Gareth