僕の世界観を変えてみる

文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。仲良くやろうよ。

Ruby初心者がrbenvを使ってRubyのバージョンアップを試みる

環境 ツール : vagrant OS : Ubuntu-trusty-64

問題

rubyのバージョンを確認したところ1.9.3となっていた(2020年7月の最新は2.8.0)

$ ruby -v

>>
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

あまりに古いのでrubyのバージョンアップを試してみる。

rbenvで最新のRubyのバージョンが表示されない件

バージョン管理のためにrbenvでインストール。

$ rbenv install -l

>>
Available versions:
  1.8.6-p383
   ~
  1.9.3-preview1
  1.9.3-rc1
  2.0.0-dev

すると、2.0.0までしか表示されなかった。

ググってみると先人たちが解決方法を記載していてくれた。

Ruby 2.3.0がrbenvに表示されない時にやったこと - Qiita

rbenvでRubyのバージョンアップをする(for Mac) - Qiita

rbenv, ruby-buildをアップグレード

まずはrbenvruby-buildをアップグレードするようだ。

$ apt-gent upgrade rbenv ruby-build

>>
rbenv is already the newest version.
ruby-build is already the newest version.

二つとも最新になっているようだ。

しかし、rbenv install -lをしても2.0.0しか表示されない。

では次の方法。

rbenvをGit pullする

次はGitから最新のrbenvpull`してみる。

rbenv/plugins/ruby-build: No such file or directory問題
$ cd ~/.rbenv/plugins/ruby-build

>>
bash: cd: /root/.rbenv/plugins/ruby-build: No such file or directory

むむ。

ディレクトリが見つからないらしい。

ルートの隠しファイルを見ても見つからない。

そもそも.rbenv自体がない。

alreadyと表示されていたのになぜだ。

試しにwhichしてみる。

$ which rbenv

>>
/usr/bin/rbenv

うむ、rbenvは存在するけれどもrootにいない?

これは…pathの問題だろうか?

rbenvを入れなおす

apt-get updateしても改善されなかったので下記のQiitaを参考にrbenvをgit cloneしてみる。

CentOSにrbenv, Rubyをインストールする - Qiita

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

ルートディレクトリに.rbenvを作成しその中にcloneするようだ。

自分でrootに.rbenvを作らなければいけなかったのか。

$ ls -d ~/.rbenv

>>
/root/.rbenv

中身を確認しても~/.rbenv/plugins/ruby-buildのようなディレクトリは存在しなかった。

これも自分で作成するようなのでruby-buildgit cloneする。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

これで.rbenvpluginのディレクトリが作成され、準備が整った。

作成した/.rbenv/plugins/ruby-buildに移動しgit pullしてみる。

$ cd ~/.rbenv/plugins/ruby-build
$ git pull

Already up-to-date.と表示されたらrbenvのアップデート完了

rbenv install -lをしてみるとたくさんのバージョンが確認できる。

>>
Available versions:
  1.8.5-p52
 ~
  2.7.1
  2.8.0-dev

rbenv installするとruby-buildのヘルプが表示される件

これでRubyのバージョンを上げられると思いインストールを試すと

$ rbenv install 2.7.1
Usage: ruby-build [-kpv] <definition> <prefix>
       ruby-build --definitions
       ruby-build --version

  -k/--keep        Do not remove source tree after installation
  -p/--patch       Apply a patch from stdin before building
  -v/--verbose     Verbose mode: print compilation status to stdout
  -4/--ipv4        Resolve names to IPv4 addresses only
  -6/--ipv6        Resolve names to IPv6 addresses only
  --definitions    List all local definitions
  -l/--list        List latest stable releases for each Ruby
  --version        Show version of ruby-build

このようにruby-buildの使い方が表示された。

ということでさらにググり続けたところrbenvはパスを通してから初期化をしないと使えないという記事を見かけた。

rbenvとruby環境の構築手順

上記の記事に書かれていることがすべてだ。

rbenvのPathを通す

まずはrbenvが使えるようにパスを通す。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

rbenv を初期化する。

次に/.rbenv/binに移動し、初期化する。

$ cd ~/.rbenv/bin
$ rbenv init

>>
# Load rbenv automatically by adding
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

eval "$(rbenv init -)"これをするようにと表示されたのでやってみる。

※最終的に上記のコマンドだとうまく行きませんでした。 記事の最後に追記してあります。

$ eval "$(rbenv init -)"

特別なにも表示されなかったがエラーもでなかったので成功したようだ。

.bashrcを再読み込みしてからもう一度Rubyのバージョンリストを確認してみる。

$ source ~./bashrc
$ rbenv install -l

>>
2.5.8
2.6.6
2.7.1
jruby-9.2.12.0
maglev-1.0.0
mruby-2.1.1
rbx-5.0
truffleruby-20.1.0
truffleruby+graalvm-20.1.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all' to show all local versions.

すると最新バージョンのみが表示されるようになった。

欲しかったのは2.7.1なのでインストールしてみる。

$ rbenv install 2.7.1

>>
Downloading ruby-2.7.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.bz2
Installing ruby-2.7.1...
Installed ruby-2.7.1 to /home/vagrant/.rbenv/versions/2.7.1

できたっぽいぞ。

$ rbenv versions
* system
  2.7.1

2.7.1がいる!

globalを使って常に2.7.1を使用できるように指定する。

$ rbenv global 2.7.1
$ rbenv versions

>>
  system
* 2.7.1 (set by /home/vagrant/.rbenv/version)

vagrantからログアウトするとRubyのバージョンがもとに戻る件

このあとRubyのバージョンを確認したら2.7.1になっていたので満足してvagrantからログアウトした。

そして作業を再開しようとvagrantで接続したところ、Rubyのバージョンが1.9.3に戻っていた。

OMG

もう一度この方の記事を読んでみる。 ▼rbenvとruby環境の構築手順

すると、どうやら僕がやった'eval "$(rbenv init -)"'の部分が間違っていたようだ。

$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

~/.bashrcに 'eval "$(rbenv init -)"`を書き込む必要があった。

そしてもう一度~/.bashrcを再読み込みし、確認のため上記の記事にあったrbenv-doctorを試してみる。

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/ 
rbenv-doctor | bash
Checking for `rbenv' in PATH: multiple
  You seem to have multiple rbenv installs in the following locations.
  Please pick just one installation and remove the others.

  /home/vagrant/.rbenv/bin/rbenv
  /home/vagrant/.rbenv/bin/rbenv
  /home/vagrant/.rbenv/bin/rbenv
  /usr/bin/rbenv

Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /home/vagrant/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 
20200722)
Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK

すべてOKになっているので大丈夫のようだ。

最後に設定を保存しなければいけない。

$ rbenv rehash

これでvagrantからログアウトし、再度ログインしてもRubyのバージョンが2.7.1に維持されるようになった。

めでたしめでたし。