faisceau de rails propre


88

Après la mise à jour d'un bundle, vous aurez des gemmes qui peuvent être obsolètes - puisqu'une version plus récente de cette gemme a été installée. Il n'y a pas de telle commande sous l' bundleexécutable ie bundle clean. Comment se débarrasser de ces joyaux obsolètes?

Il s'agit d'une tentative de réduire la taille des limaces dans mon application rails.

Réponses:


131

Si vous utilisez Bundler 1.1 ou version ultérieure, vous pouvez l'utiliser bundle clean, comme vous l'aviez imaginé. Ceci est redondant si vous utilisez bundle install --path(Bundler gère l'emplacement que vous avez spécifié avec --path, prend donc la responsabilité de supprimer les gemmes obsolètes), mais si vous avez utilisé Bundler pour installer les gemmes en tant que gemmes système, alors bundle clean --forcesupprimera toutes les gemmes système non requis par votre Gemfile. Attention aveuglément évidente: ne faites pas cela si vous avez d'autres applications qui reposent sur des gemmes système qui ne sont pas dans votre Gemfile!

Pat Shaughnessy a une bonne description bundle cleanet d'autres nouveautés dans le bundler 1.1 .


30
Pour ceux qui utilisent rvm, notez que bundle clean --forcecela ne touche pas vos gemmes globales, mais uniquement celles de votre ensemble actuel. Donc bundle clean --forceproduit le même résultat que et est plus rapide puis rvm gemset emptysuivi de bundle install.
Gabe Kopley

19
AVERTISSEMENT: "Bundle clean --force" peut faire exploser un grand nombre de gemmes si vous ne faites pas attention. Cela devrait être la première ligne de cette réponse ... d'autant plus qu'elle a tant de voix. FAITES ATTENTION!
jerrylroberts

36

Si vous utilisez RVM, vous pouvez utiliser rvm gemset emptypour l'ensemble de gemmes actuel - cette commande supprimera toutes les gemmes installées dans l'ensemble de gemmes actuel (l'ensemble de gemmes lui-même restera en place). Ensuite, exécutez bundle installpour installer les versions réelles des gemmes. Assurez-vous également de 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 installavant bundle install).


22

Si vous utilisez RVM, vous pouvez installer vos gemmes dans des ensembles de gemmes . De cette façon, lorsque vous souhaitez effectuer un nettoyage complet, vous pouvez simplement supprimer l'ensemble de gemmes, qui à son tour supprime toutes les gemmes qui y sont installées. Votre autre option consiste simplement à désinstaller vos gemmes inutilisées et à réexécuter votre bundle installcommande.

Étant donné que bundler est censé être un outil de gestion des versions de gem projet par projet, il ne fournit pas de bundle cleancommande. Cela signifierait la possibilité de supprimer également les gemmes associées à d'autres projets, ce qui ne serait pas souhaitable. Cela signifie que le bundler est probablement le mauvais outil à utiliser pour gérer votre répertoire gem. Ma recommandation personnelle serait d'utiliser les jeux de gemmes RVM pour bac à sable vos gemmes dans certains projets ou versions ruby.


41
Pas besoin de supprimer l'ensemble de gemmes, vous pouvez simplement taper «rvm gemset empty gemset_name», puis relancer «bundle install».
JAG

Excellente explication. Savoir cela à propos de bundler aide. Merci.
Volte

9
bundle clean --force will do the job
sailor

avec rvm, effacez le dossier .rvm / gems / ruby-xxxxxx / specs si "bundle install" refuse de retélécharger les gemmes.
barbacan

@JAG J'ajouterais que vous devez 'gem install bundler' après avoir nettoyé gemset pour pouvoir appeler bundle install
maleta

13

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


1
J'ai dû faire ça pour que ça cesse de me déranger sur "vous devez appeler bundle install avec --no-deployment". Merci
Kevin

2
Merci pour l'idée. Bien que pour moi, l'utilisation d'un plus gros marteau ait aidé. rvm implode --forcepuis réinstaller rvm
Ryan

1

Je suppose que vous installez des gemmes vendor/bundle? Si oui, pourquoi ne pas simplement supprimer toutes les gemmes et faire un nettoyage bundle install?


mon répertoire de fournisseurs ne garde la trace des actifs et des plugins installés. Je suis sur Rails 3.1
iGbanam

Alors, quelle est la raison de supprimer les gemmes inutilisées si elles ne sont pas copiées lors du déploiement? Ils ne prennent pas beaucoup de place.
Leonid Shevtsov

je déploie cette application rails sur un intranet; ce qui signifie que je gère les fichiers et l'environnement localement. si vous connaissez des solutions que je peux utiliser pour cela, veuillez les partager.
iGbanam


0

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


ce n'est pas nécessairement pour heroku. Je souhaite réduire la taille de l'application de rails elle-même.
iGbanam

0

Exécutez simplement, pour nettoyer les gemmes obsolètes et supprimer les avertissements d'impression après le bundle.

bundle clean --force

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.