I’m sure it’s never happened to you but for me, occasionally,
bundler or even the
gem command pulls in a different version of a Gem that was installed by a standard system package. Even more rarely, this breaks some other software that was installed on the system.
This one-liner will remove ALL gems installed on a system.
gem search --local --no-version | tail -n +3 | xargs gem uninstall --all
tail -n +3 command is needed to remove the
\n*** LOCAL GEMS ***\n header that
gem spits out in search mode.
That one-linger does not affect the platform’s package database but does nuke all of the gem associated files that may have been installed by a regular package. Since the system package database was untouched, now it’s just a matter of finding out which packages installed a gem reinstalling them. On EL systems, the names of these package are highly consistent and will begin with
rpm -qa | grep '^rubygem-' | xargs yum reinstall -y
At this point, in theory, we have scrubbed the system clean of all gems that were installed and reinstalled any gem providing
RPM that’s consistent with the platforms naming guidelines. However, it is possible that a poorly named package was missed so do warrant some caution in using this procedure.
Here are the two one-liners together for an easy cut’n’paste.
gem search --local --no-version | tail -n +3 | xargs gem uninstall --all rpm -qa | grep '^rubygem-' | xargs yum reinstall -y