[Ruby]RVM install等でdefault で一緒にインストールされたgemをアンインストールする方法
RVM等でRubyをインストールした場合にdefaultインストールされているgemを無理やりアンインストールする方法です。
結論から言うと
RVMのgemsetに関するファイルを削除すればアンインストールできるようになります。
説明
準備
まずはdefaultのgem しかインストールされていないgemsetを作ります。
(これは説明の為に作るだけなので、実際は作らなくていいです)
$ rvm gemset list gemsets for ruby-2.1.2 (found in /usr/local/rvm/gems/ruby-2.1.2) => (default) global $ rvm gemset create test ruby-2.1.2 - #gemset created /usr/local/rvm/gems/ruby-2.1.2@test ruby-2.1.2 - #generating test wrappers.............. $ rvm gemset list gemsets for ruby-2.1.2 (found in /usr/local/rvm/gems/ruby-2.1.2) => (default) global test $ rvm gemset use test Using ruby-2.1.2 with gemset test $ gem list *** LOCAL GEMS *** bigdecimal (1.2.4) bundler (1.7.3) bundler-unload (1.0.2) executable-hooks (1.3.2) gem-wrappers (1.2.7, 1.2.5) io-console (0.4.2) json (1.8.1) minitest (4.7.5) psych (2.0.5) rake (10.1.0) rdoc (4.1.0) rubygems-bundler (1.4.4) rvm (1.11.3.9) test-unit (2.1.2.0) #<=====これを消したい!
今回はこのtest-unit gemをアンインストールしたいと思います。
失敗例
普通にやると、以下のようにdefaultのgemだからという理由で失敗します。
$ gem uninstall test-unit ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem
updateして古いのを消そうとしても、、
$ gem update test-unit Updating installed gems Updating test-unit Fetching: power_assert-0.2.3.gem (100%) Successfully installed power_assert-0.2.3 Fetching: test-unit-3.1.2.gem (100%) Successfully installed test-unit-3.1.2 Parsing documentation for power_assert-0.2.3 Installing ri documentation for power_assert-0.2.3 Installing darkfish documentation for power_assert-0.2.3 Parsing documentation for test-unit-3.1.2 Installing ri documentation for test-unit-3.1.2 Installing darkfish documentation for test-unit-3.1.2 Done installing documentation for power_assert, test-unit after 3 seconds Gems updated: power_assert test-unit $ gem list | grep test-unit test-unit (3.1.2, 2.1.2.0) $ gem uninstall test-unit -v '2.1.2.0' ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem $ gem cleanup test-unit Cleaning up installed gems... Clean Up Complete $ gem list | grep test-unit test-unit (3.1.2, 2.1.2.0)
消えない・・・
消す方法
RVMのインストールに関するconfigファイルを削除します
$ cd ${RVM root dir} $ cd gems/ruby-2.1.2@global/specifications/default/ # v2.1.2の場合 $ ls -l total 32 -rw-rw-r-- 1 root rvm 563 Oct 8 2014 bigdecimal-1.2.4.gemspec -rw-rw-r-- 1 root rvm 357 Oct 8 2014 io-console-0.4.2.gemspec -rw-rw-r-- 1 root rvm 584 Oct 8 2014 json-1.8.1.gemspec -rw-rw-r-- 1 root rvm 341 Oct 8 2014 minitest-4.7.5.gemspec -rw-rw-r-- 1 root rvm 1502 Oct 8 2014 psych-2.0.5.gemspec -rw-rw-r-- 1 root rvm 1493 Oct 8 2014 rake-10.1.0.gemspec -rw-rw-r-- 1 root rvm 2775 Oct 8 2014 rdoc-4.1.0.gemspec -rw-rw-r-- 1 root rvm 511 Jul 6 15:42 test-unit-2.1.2.0.gemspec $ mv -i test-unit-2.1.2.0.gemspec test-unit-2.1.2.0.gemspec_bk $ gem list | test-unit $ gem list | grep test-unit test-unit (3.1.2)
はい消えました。
ちなみに戻すと復活します。3.1.2をインストールしていない場合は当然項目自体出てきません
$ gem list | grep tes-unit
#===> nothing
確認
本当に消せるか確認
$ gem list | grep test-unit #===> nothing $ gem install test-unit -v '2.1.2.0' $ gem list | grep test-unit test-unit (2.1.2) $ gem uninstall test-unit Remove executables: testrb in addition to the gem? [Yn] Y Removing testrb Successfully uninstalled test-unit-2.1. $ gem list | grep test-unit #===> nothing
以上です。