How to uninstall all gems installed using `bundle install`

Ruby on-RailsBundler

Ruby on-Rails Problem Overview


How can I remove all the gems installed using bundle install in a particular RoR project. I don't want to uninstall gems that are used by other projects.

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Since we're using ruby you could do something like this I guess:

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: Only lightly tested.

Solution 2 - Ruby on-Rails

There's no one simple way to remove all gems - let alone removing those within a specific bundle. You could try some of these suggestions: https://stackoverflow.com/questions/8095209/uninstall-all-installed-gems-in-osx

Adapt to the bundle show command instead of gem list


For the future, try this approach:

If you install your bundle locally like the example below, the gems won't be installed in your global gem directory. Then you can easily delete the installation folder to delete all gems of the bundle.

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

The path option is saved to .bundle/config just like all others and any subsequent bundle install calls will use it unless you set it to something else or remove it from the config!

Solution 3 - Ruby on-Rails

You can use (like Tobias says, if you are using RVM)

rvm gemset empty [gemset]

Directly on the gemset, for example

rvm gemset empty 2.0.0@server

Solution 4 - Ruby on-Rails

Comment out all gems in your Gemfile and run

bundle clean --force

Solution 5 - Ruby on-Rails

It is actually as simple as

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

If you are not using RVM/RBENV, you might hit into issue when gem attempts to uninstall system library which can fail. In that case, call uninstall command one by one to skip these.

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

Solution 6 - Ruby on-Rails

If you're using rvm, you could of course just uninstall and reinstall the version of ruby under which you've installed the gems, 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........

and now you have a ruby environment clean of any installed gems.

Solution 7 - Ruby on-Rails

Another way from https://makandracards.com/jan0sch/9537-uninstall-all-ruby-gems-from-your-system (similar to rainkinz's answer and Ralph's comment). Here are some variations:

# 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

Breaking this down:

  • gem list lists all gems
  • cut -d" " -f1 takes the first column
  • xargs -I % gem uninstall -aIx % calls gem uninstall -aIx with each output line as an argument

Note that I specified the argument with -I as % and passed it directly for security:

xargs -I % gem uninstall -aIx %

instead of:

xargs gem uninstall -aIx

That's because xargs has a security issue where options like -n can be passed to its command and cause unexpected results. This can be demonstrated with the following example:

# 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

Solution 8 - Ruby on-Rails

If your problem is similar to mine, then you want to uninstall all gems that were installed while testing GemFile changes, in that case I simply used:

bundle clean

That uninstalled all the gems that are not specified in the GemFile and GemFile.lock.

I have not tested it but I suppose you could delete all lines from your Gemfile and run the above command to get rid of all the gems installed by the ROR project in the current directory.

Solution 9 - Ruby on-Rails

Found solution for uninstalling all gems except of default:

Crete delete_gems.rb with

#!/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

Run this script:

sudo chmod 1777 delete_gems.rb
./delete_gems.rb

All gems will be removed except of default. Here link on original solution http://zanshin.net/2013/06/10/how-to-delete-all-ruby-gems/

Solution 10 - Ruby on-Rails

I was using a docker setup and here's how I've reverted gems installed by bundler without rebuilding docker.


Have a back up copy of Gemfile and Gemfile.lock.

Temporarily delete the contents of your Gemfile (do not delete the file, just leave it blank) then (optionally) delete the Gemfile.lock and run:

bundle clean --force

That should remove all gems installed by bundler.

Then you can revert Gemfile and Gemfile.lock with your backup copy or git.

Solution 11 - Ruby on-Rails

As others have mentioned you could use rvm. To list all available gemsets

rvm gemset list

And then

rvm gemset empty <gemset-name>

Solution 12 - Ruby on-Rails

How about:

rm -rf vendor/bundle/

Of if you're the timid type:

mv vendor/bundle vendor/bundle_old

Simple, easy, and guaranteed to flush out the cruft.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnishView Question on Stackoverflow
Solution 1 - Ruby on-RailsrainkinzView Answer on Stackoverflow
Solution 2 - Ruby on-RailsKappaNossiView Answer on Stackoverflow
Solution 3 - Ruby on-RailsmartincitoView Answer on Stackoverflow
Solution 4 - Ruby on-RailsAndreiView Answer on Stackoverflow
Solution 5 - Ruby on-RailslzapView Answer on Stackoverflow
Solution 6 - Ruby on-RailsDan KerchnerView Answer on Stackoverflow
Solution 7 - Ruby on-RailsZack MorrisView Answer on Stackoverflow
Solution 8 - Ruby on-RailsPerennialistaView Answer on Stackoverflow
Solution 9 - Ruby on-RailsKirikamiView Answer on Stackoverflow
Solution 10 - Ruby on-RailsvpibanoView Answer on Stackoverflow
Solution 11 - Ruby on-RailsFullStackEngineerView Answer on Stackoverflow
Solution 12 - Ruby on-RailsDavid HempyView Answer on Stackoverflow