Reputation: 8526
There are instances where I would like to revert and uninstall all previous gem installations.
For instance, I needed to assist a friend migrate their rails development machine to use RVM. As they had been previously using the system-wide gem
, he was experiencing many headaches when working with multiple projects. Essentially, he was the poster-child for an RVM convert.
How can I elegantly uninstall all of the gems on his OSX system?
Upvotes: 204
Views: 138279
Reputation: 8526
Rubygems >= 2.1.0
gem uninstall -aIx
a
removes all versions
I
ignores dependencies
x
includes executables
Rubgems < 2.1.0
for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
Upvotes: 471
Reputation: 189
And for those of you who are here because you want to remove all gems with a certain prefix (ahem I'm looking at you aws-sdk!) you can run something like this:
gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx
Obviously put in your query instead of aws-sdk-
. You need the -I
in there to ignore dependencies.
Adopted form Ando's earlier answer
Upvotes: 9
Reputation: 5049
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax
grep here is excluding default gems. All other gems will be uninstalled. You can also precede it with sudo
in case you get permission issues.
Upvotes: 2
Reputation: 1071
First make sure you have at least gem version 2.1.0
gem update --system
gem --version
# 2.6.4
To uninstall simply run:
gem uninstall --all
You may need to use the sudo
command:
sudo gem uninstall --all
Upvotes: 14
Reputation: 4721
You could also build out a new Gemfile and run bundle clean --force
. This will remove all other gems that aren't included in the new Gemfile.
Upvotes: 58
Reputation: 643
If you are using Rubygems version 2.1.0 or later, you can try: gem uninstall --all
.
Upvotes: 10
Reputation: 4204
Rubygems >= 2.1.0
gem uninstall -aIx
If Terminal returns below error
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Then write above command as below
sudo gem uninstall -aIx
And enter your mac os account password Done!!
Upvotes: 9
Reputation: 48729
When trying to remove gems installed as root, xargs seems to halt when it encounters an error trying to uninstall a default gem:
sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR: While executing gem ... (Gem::InstallError)
# gem "test-unit" cannot be uninstalled because it is a default gem
This won't work for everyone, but here's what I used instead:
sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Upvotes: 2
Reputation: 842
The only command helped me to cleanup all gems and ignores default gems, which can't be uninstalled
for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Upvotes: 5
Reputation: 15276
If you like doing it using ruby:
ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"
Cheers
Upvotes: 7
Reputation: 1171
A slighest different version, skipping the cut step, taking advantage of the '--no-version' option:
gem list --no-version |xargs gem uninstall -ax
Since you are removing everything, I don't see the need for the 'I' option. Whenever the gem is removed, it's fine.
Upvotes: 31
Reputation: 2346
Use either
$ gem list --no-version | xargs gem uninstall -ax
or
$ sudo gem list --no-version | xargs sudo gem uninstall -ax
Depending on what you want, you may need to execute both, because "gem list" and "sudo gem list" provide independent lists.
Do not mix a normal "gem list" with a sudo-ed "gem uninstall" nor the other way around otherwise you may end up uninstalling sudo-installed gems (former) or getting a lot of errors (latter).
Upvotes: 11
Reputation: 12809
I did that not too long ago (same poster-child RVM switcher situation):
gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax
Takes the list of all gems (incl. version stuff), cuts it to keep only the gem name, then uninstalls all versions of such gems.
The sudo
is only useful if you had gems installed system-wide, and should not be included unless necessary.
Upvotes: 3