Comment désinstaller tous les gemmes installés en utilisant ' bundle install`

Comment puis-je supprimer tous les gemmes installés en utilisant bundle install dans un projet RoR particulier. Je ne veux pas désinstaller les gemmes qui sont utilisés par d'autres projets.

38
demandé sur nish 2014-01-27 19:23:14

7 réponses

puisque nous utilisons ruby, vous pourriez faire quelque chose comme ça je suppose:

bundle list | ruby -e 'ARGF.readlines[1..-1].each {|l| g = l.split(" ");  puts "Removing #{g[1]}"; `gem uninstall --force #{g[1]} -v #{g[2].gsub(/\(|\)/, "")}`; }'

NOTE: seulement légèrement éprouvé.

26
répondu rainkinz 2014-01-27 15:59:23

il n'y a pas de moyen simple pour enlever toutes les gemmes - encore moins celles qui se trouvent dans un faisceau spécifique. Vous pouvez essayer certaines de ces suggestions: désinstaller tous les gemmes installés, dans OSX?

S'adapter à la commande bundle show au lieu de gem list


Pour l'avenir, essayez cette approche:

si vous installez votre bundle localement comme dans l'exemple ci-dessous, les gemmes ne seront pas installé dans votre répertoire global gem. Ensuite, vous pouvez facilement supprimer le dossier d'installation pour supprimer toutes les gemmes de l'ensemble.

# install gems to project_root/vendor/bundle
bundle install --path vendor/bundle --without test

l'option path est sauvegardée.bundle/config comme tous les autres et tous les appels subséquents bundle install l'utiliseront à moins que vous ne le positionniez sur quelque chose d'autre ou que vous ne le retiriez de la config!

11
répondu KappaNossi 2017-05-23 12:09:56

vous pouvez utiliser (comme Tobias dit, si vous utilisez RVM)

rvm gemset empty [gemset]

directement sur le gemset, par exemple

rvm gemset empty 2.0.0@server
9
répondu martincito 2017-04-10 15:08:04

si vous utilisez rvm, vous pouvez bien sûr juste désinstaller et réinstaller la version de ruby sous laquelle vous avez installé les gemmes, i.e.

% rvm use
Using /home/ubuntu/.rvm/gems/ruby-2.2.1
% rvm uninstall 2.2.1
ruby-2.2.1 - #removing rubies/ruby-2.2.1..
ruby-2.2.1 - #removing default ruby interpreter.............
% rvm install 2.2.1
Searching for binary rubies, this might take some time.
Found remote file https://rvm_io.global.ssl.fastly.net/binaries/ubuntu/14.0/x86_64/ruby-2.2.1.tar.bz2
Checking requirements for ubuntu.
Requirements installation successful.
ruby-2.2.1 - #configure
ruby-2.2.1 - #download
ruby-2.2.1 - #validate archive
ruby-2.2.1 - #setup 
ruby-2.2.1 - #gemset created /home/ubuntu/.rvm/gems/ruby-2.2.1@global
ruby-2.2.1 - #importing gemset /home/ubuntu/.rvm/gemsets/global.gems..............................
ruby-2.2.1 - #generating global wrappers........
ruby-2.2.1 - #gemset created /home/ubuntu/.rvm/gems/ruby-2.2.1
ruby-2.2.1 - #importing gemsetfile /home/ubuntu/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.2.1 - #generating default wrappers........

et maintenant vous avez un environnement ruby propre de toutes les gemmes installées.

3
répondu Dan Kerchner 2015-07-15 15:19:08

c'est en fait aussi simple que

gem list --no-versions | xargs gem uninstall -a

si vous n'utilisez pas RVM/RBENV, vous pourriez avoir un problème lorsque gem tente de désinstaller une bibliothèque système qui peut échouer. Dans ce cas, appelez uninstall commande un par un pour sauter ceux-ci.

gem list --no-versions | xargs -n1 gem uninstall -a
3
répondu lzap 2017-09-09 19:14:41

solution trouvée pour désinstaller toutes les gemmes sauf par défaut:

la Crète delete_gems.rb avec

#!/usr/bin/env ruby
# Remove all gems EXCEPT defaults :)

`gem list -d`.split(/\n\n^(?=\w)/).each do |data|
  match = data.match(/(?<name>([^\s]+)) \((?<versions>.*)\)/)
  name = match[:name]
  versions = match[:versions].split(', ')

  if match = data.match(/^.*\(([\d\.]*),? ?default\): .*$/)
    next if match[1].empty? # it's the only version if this match is empty
    versions.delete(match[1] || versions[0])
  end

  versions.each { |v| system "gem uninstall -Ix #{name} -v #{v}" }
end

exécutez ce script:

sudo chmod 1777 delete_gems.rb
./delete_gems.rb

tous les gemmes seront supprimés sauf par défaut. Lien sur la solution originale http://zanshin.net/2013/06/10/how-to-delete-all-ruby-gems/

0
répondu Kirikami 2016-01-06 09:37:49

une autre façon de https://makandracards.com/jan0sch/9537-uninstall-all-ruby-gems-from-your-system (similaire à la réponse de rainkinz et le commentaire de Ralph ). Voici quelques variantes:

# if you're the root user:
gem list | cut -d" " -f1 | xargs -I % gem uninstall -aIx %

# if you're a non-root user:
gem list | cut -d" " -f1 | xargs -I % sudo gem uninstall -aIx %

# docker compose (if your service is named "web" running the root user):
docker-compose run web bash -c 'gem list | cut -d" " -f1 | xargs -I % gem uninstall -aIx %'

####

gem install bundler
# or if using docker compose:
docker-compose run web gem install bundler

# optionally reinstall gems:
bundle install
# or if using docker compose:
docker-compose run web bundle install

la Rupture de ce bas:

  • gem list liste Toutes les gemmes
  • cut -d" " -f1 prend la première colonne
  • xargs -I % gem uninstall -aIx % appels gem uninstall -aIx avec chaque ligne de sortie comme un argument

Notez que j'ai précisé que l'argument de -I comme % et elle passa directement pour la sécurité:

xargs -I % gem uninstall -aIx %

au lieu de:

xargs gem uninstall -aIx

c'est parce que xargs a un problème de sécurité où des options comme -n peuvent être passées à sa commande et causer des résultats inattendus. Cela peut être démontré par l'exemple suivant:

# correctly prints "-n hello" (with trailing newline):
echo '-n Hello' | xargs -I % echo % | xargs -I % echo %

# incorrectly prints "hello" (without trailing newline):
echo '-n Hello' | xargs echo
0
répondu Zack Morris 2018-07-11 19:51:40