2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rbenv で gem のコマンドが期待と異なる Ruby で動いてしまう

Posted at

なんのこと?

rbenv を使って複数バージョンの Ruby をインストールしているが,gem のコマンドがなぜか期待と異なるバージョンの Ruby で動いてしまう。

「gem のコマンド」というのは,rails gem によって使えるようになる rails コマンドとか,pry gem による pry コマンドとかのこと。

「異なるバージョンの Ruby で動く」というのは,例えば,デフォルトの Ruby バージョンを 2.5.3 にしてあるのに,pry して RUBY_VERSION を表示すると,2.5.1 と表示される,といった具合。

環境

OS は macOS 10.11 および CentOS 7.5 の両方。

rbenv で Ruby 2.5.1 と 2.5.3 がインストールされており,

rbenv global 2.5.3

でデフォルトを Ruby 2.5.3 にしてある。

カレントディレクトリーに .ruby-version ファイルが存在せず(つまり local で他のバージョンが有効になっているわけでもなく),rbenv shell で一時的にバージョンを変えたわけでもない,

それから,rbenv-communal-gems を使って,Ruby 2.5.1 と 2.5.3 の gem は共通化してある。← たぶんここが一つのポイント

rbenv も rbenv-communal-gems も ruby-build も最新版にしてある。

RubyGems のバージョンは

gem -v

で,2.7.6 と出た。最新ではなかった。 ← ここもポイント

実験

gem のコマンドが期待と異なるバージョンの Ruby で動いてしまっていることをいくつかのコマンドで確かめてみる。

pry コマンドについては「なんのこと?」で既に述べた。

なお,念のためコマンドの実行前に rbenv rehash もしている。

rails

最近の Ruby on Rails では,rails new で生成されるファイル群に,Ruby のバージョンが書かれている。

まずは Gemfile。ここには

ruby '2.5.1'

のように,Ruby バージョンを指定する行がある。やはり 2.5.1 になってしまっている。

次に,.ruby-version。これは,rbenv が「このディレクトリーではこのバージョンの Ruby を使うんだ」ということを知るためのファイル。rbenv local X.X.X を使うとこのファイルが出来るね。

なぜかこちらは

2.5.3

と正常だった。

slimrb

slimrb コマンドは slim gem を入れると使えるもので,標準入力から得た Slim フォーマットのドキュメントを HTML(なり XML なり)に変換して表示してくれるもの。

まず

slimrb

でコマンドを起動し,

div = RUBY_VERSION

と入力し(改行も入れる),Ctrl+D で終える。

すると

<div>2.5.1</div>

が表示される。やはり Ruby 2.5.1 だ。ふーむ

irb と erb

結論を先に書くと,irb と erb は正常だった。
これはもともと Ruby に入っているコマンドだからなのではないか(コマンドの格納されるディレクトリーが,後で入れた gem のものとは異なる)。

では,irb を。irb でコマンドを起動し,RUBY_VERSION を表示。"2.5.3" と出た。正常。

次に,erb。erb でコマンドを起動し,

<%= RUBY_VERSION %>

と入力して(改行も),Ctrl+D で終了。2.5.3 と表示された。正常。

解決

いろいろ調べたが,Ruby バージョンが決定される仕組みがよく分からなかった。

そうこうするうち,既述のように RubyGems が最新版でないことに気付いたので,念のため新しくしておこうと,

gem update --system

とやった。念のため,

gem -v

でバージョンを確認。2.7.8 と最新になった。

これで正常になった。

原因は結局分からなかったが,ともかく RubyGems を最新にすることで直った。

RubyGems の History.txt
も眺めてみたけど,英語力が乏しいためか,関係ありそうな記述は見つけられなかった。

この件ではけっこうな時間を無駄に費やしてしまったけど,何だったんだろ〜!

2
1
2

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?