28
29

More than 3 years have passed since last update.

[ruby,rails]gemのバージョンのdefault設定解除方法

Last updated at Posted at 2020-03-04

1.エラーの例

$gem uninstall railties -v '6.0.2.1' #アンインストールコマンドです
~中略~
gem "railties" cannot be uninstalled because it is a default gem #エラー文

railsやその周辺のgemをダウングレードするべく、最新のgemに対し上記のアンインストールコマンドを打ったところその下のようにエラー文をだしました。そのエラー解決についてあまりネット上に記載がなかったので、解決方法を記載します
※railsなどのgemのバージョンを下げるには"インストールされている最新のgemのバージョン=反映させたいgemバージョン"とするため、必要なバージョン以上の全てのバージョンをアンインストールする必要があります

2.エラーの原因

コマンドの意味をよく調べずにgem update --defaultというコマンドを打ったところ、local( /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0)のgemの最新バージョンが一度にインストールされ、かつ最新バージョンがデフォルトに設定されてしまったのが原因でした

# (gem update --default コマンド入力後)
$ gem list #projectのGemfileにあるgemで使用可能な(もともとpcにinstallされている)gemのバージョンを調べるコマンドです。
       (localのどこで打っても同じものが出てきます)
〜前略〜
rails (default: 6.0.2.1, 5.2.4.1)  #このdefault:と付いているバージョンはdefault設定を解除しないとアンインストールすることができません
rails-controller-testing (1.0.4)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.3.0)
railties (default: 6.0.2.1, 5.2.4.1) #上記と同じです
〜後略〜

3.解決方法

下記の順にコマンドを打っていただければdefaultを解決できます

$ gem environment #gemのインストール先のパスを確認します
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.6
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin18]
  - INSTALLATION DIRECTORY: /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
  #↑この行でgemのインストール先のパスを確認します
 〜後略〜

$ cd #ホームディレクトリへ移動
$ cd /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0 
 #上記で確認したパスに移動します(今回は筆者のディレクトリで記述します)
$ ls #中を確認します
build_info  doc gems
cache   extensions  specifications ←この中にdefault設定が記述されています

$ rm -rf specifications/default/ 
 #specificationsのなかのdefaultディレクトリ削除します(これでdefaultが解除されます)

$ gem list #defaultが解除されているのを確認します
〜前略〜
rails (6.0.2.1, 5.2.4.1) #defaultが解除されているのが確認できます
rails-controller-testing (1.0.4)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.3.0)
railties (6.0.2.1, 5.2.4.1) #defaultが解除されているのが確認できます
〜後略〜

4.(補足)ダウングレード

1~3が終わった状態で下記のコマンドを打つことでダウングレードすることができます(当初の目的がダウングレードだったので忘れずに行いましょう)

$gem uninstall railties -v '6.0.2.1'
$gem uninstall rails -v '6.0.2.1'

$ gem list
〜前略〜
rails (5.2.4.1) #6.0.2.1が削除されているのが確認できます
rails-controller-testing (1.0.4)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.3.0)
railties (5.2.4.1) #6.0.2.1が削除されているのが確認できます
〜後略〜

5.注意点

default値を消すことができないことに焦ってgem uninstall -I -a -x --user-install --force(クリーンアップ(強制削除))をしてしまわないようにしましょう。このコマンドでもdefault値は消せず、gemの最新バージョン以外の全てのバージョンと、初期から入っていない全てのgemが削除されます。筆者は焦ってこのコマンドを打ってしまい、macのタイムマシーンで元に戻すことにしました。バックアップしてない人は手詰まり(元のバージョンとすることができない状態。最新バージョンならgem install bundlerなどで必要なものだけのインストールはできますが...)になってしまうので注意しましょう。

6.参考

bundled gem と default gem の違い
https://blog.n-z.jp/blog/2016-09-10-bundled-gem-and-default-gem.html

28
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
29