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

后端 未结 7 725
花落未央
花落未央 2021-01-29 23:25

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 b

相关标签:
7条回答
  • 2021-01-29 23:46

    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.

    0 讨论(0)
  • 2021-01-29 23:48

    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
    
    0 讨论(0)
  • 2021-01-29 23:51

    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.

    0 讨论(0)
  • 2021-01-29 23:58

    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.

    0 讨论(0)
  • 2021-01-30 00:02

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

    sudo gem clean
    
    0 讨论(0)
  • 2021-01-30 00:08

    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)
    0 讨论(0)
提交回复
热议问题