What is the best way to uninstall gems from a rails3 project?

Ruby on-Rails-3UninstallationBundler

Ruby on-Rails-3 Problem Overview


I installed all of my gems using bundler via the Gemfile. I thought (mistakenly) that if I deleted a gem from my Gemfile and ran 'bundle install' that the deleted gems would be uninstalled. I've looked at the bundler help file and, so far as I can tell, it does not have a way to uninstall gems.

Do I just use gem uninstall x for everything? Is this going to confuse bundler?

Ruby on-Rails-3 Solutions


Solution 1 - Ruby on-Rails-3

Bundler is launched from your app's root directory so it makes sure all needed gems are present to get your app working.If for some reason you no longer need a gem you'll have to run the

    gem uninstall gem_name 

as you stated above.So every time you run bundler it'll recheck dependencies

EDIT - 24.12.2014

I see that people keep coming to this question I decided to add a little something. The answer I gave was for the case when you maintain your gems global. Consider using a gem manager such as rbenv or rvm to keep sets of gems scoped to specific projects.

This means that no gems will be installed at a global level and therefore when you remove one from your project's Gemfile and rerun bundle then it, obviously, won't be loaded in your project. Then, you can run bundle clean (with the project dir) and it will remove from the system all those gems that were once installed from your Gemfile (in the same dir) but at this given time are no longer listed there.... long story short - it removes unused gems.

Solution 2 - Ruby on-Rails-3

This will uninstall a gem installed by bundler:

bundle exec gem uninstall GEM_NAME

Note that this throws

> ERROR: While executing gem ... (NoMethodError) undefined method `delete' for #<Bundler::SpecSet:0x00000101142268>

but the gem is actually removed. Next time you run bundle install the gem will be reinstalled.

Solution 3 - Ruby on-Rails-3

With newer versions of bundler you can use the clean task:

$ bundle help clean
Usage:
    bundle clean

Options:
    [--dry-run=only print out changes, do not actually clean gems]
    [--force=forces clean even if --path is not set]
    [--no-color=Disable colorization in output]
    -V, [--verbose=Enable verbose output mode]

Cleans up unused gems in your bundler directory
$ bundle clean --dry-run --force
Would have removed actionmailer (3.1.12)
Would have removed actionmailer (3.2.0.rc2)
Would have removed actionpack (3.1.12)
Would have removed actionpack (3.2.0.rc2)
Would have removed activemodel (3.1.12)
...

edit:

This is not recommended if you're using a global gemset (i.e. - all of your projects keep their gems in the same place). There're few ways to keep each project's gems separate, though:

  1. rvm gemsets (http://rvm.io/gemsets/basics)
  2. bundle install with any of the following options: --deployment or --path=<path> (http://bundler.io/v1.3/man/bundle-install.1.html)

Solution 4 - Ruby on-Rails-3

Bundler now has a bundle remove GEM_NAME command (since v1.17.0, 25 October 2018).

Solution 5 - Ruby on-Rails-3

You must use 'gem uninstall gem_name' to uninstall a gem.

Note that if you installed the gem system-wide (ie. sudo bundle install) then you may need to specify the binary directory using the -n option, to ensure binaries belonging to the gem are removed. For example

sudo gem uninstall gem_name  -n /usr/lib/ruby/gems/1.9.1/bin

Solution 6 - Ruby on-Rails-3

I seemed to solve this by manually removing the unicorn gem via bundler ("sudo bundler exec gem uninstall unicorn"), then rebundling ("sudo bundle install").

Not sure why it happened though, although the above fix does seem to work.

Solution 7 - Ruby on-Rails-3

If you want to clean up all your gems and start over

sudo gem clean

Solution 8 - Ruby on-Rails-3

  1. Comment out your entire Gemfile
  2. bundle clean

Done.

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
QuestionlashleighView Question on Stackoverflow
Solution 1 - Ruby on-Rails-3DanielView Answer on Stackoverflow
Solution 2 - Ruby on-Rails-3phatmannView Answer on Stackoverflow
Solution 3 - Ruby on-Rails-3Evgeniya ManolovaView Answer on Stackoverflow
Solution 4 - Ruby on-Rails-3D MalanView Answer on Stackoverflow
Solution 5 - Ruby on-Rails-3Declan McGrathView Answer on Stackoverflow
Solution 6 - Ruby on-Rails-3Aaron MarksView Answer on Stackoverflow
Solution 7 - Ruby on-Rails-3Douglas G. AllenView Answer on Stackoverflow
Solution 8 - Ruby on-Rails-3David HempyView Answer on Stackoverflow