rubyのバージョンを変えた後に新しいbundlerがインストールできずに困ったのでメモ。
- Ruby2.4.3(→2.5.0)
- Rails5.1.5
- Amazon Linux AMI release 2018.03
Rubyのバージョンを特定のディレクトリのみ変更
今回、以下のような状況だった。
- 元々Ruby2.4.3が入っている
- 特定のディレクトリのみ2.5.0を使いたい
$ ruby -v ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]
$ rbenv versions system * 2.4.3 (set by /var/www/hoge/current/.ruby-version)
rbenvを使って2.4.3がインストールされている状態。
まず2.5.0が欲しいので、作業したいディレクトリに移り、sudoでインストールする
$ sudo rbenv install 2.5.0 Downloading ruby-2.5.0.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.bz2 Installing ruby-2.5.0... Installed ruby-2.5.0 to /usr/local/rbenv/versions/2.5.0
$ rbenv versions system * 2.4.3 (set by /var/www/hoge/current/.ruby-version) 2.5.0
ちゃんとインストールできた。
この状態だとまだ2.4.3になっているので、
$ rbenv local 2.5.0
これでローカル(現在のディレクトリ)のみ2.5.0を使うよう設定する。
$ rbenv versions system 2.4.3 * 2.5.0 (set by /var/www/hoge/current/.ruby-version)
成功。
ちなみに、local指定することで.ruby-version
という隠しファイルが生成される
$ ls -a .ruby-version # 他は割愛
$ cat .ruby-version 2.5.0
bundlerをインストール
この状態でbundle installをしようとすると、
$ bundle install rbenv: bundle: command not found The `bundle' command exists in these Ruby versions: 2.4.3
今のbundlerはRuby2.4.3に対応しているものだよ、と警告が出て実行できない。
ここでやるべきことは簡単で、Ruby2.5.0を使用している状態でbundlerを再インストールしてあげれば良い。
$ sudo gem install bundler
これだと最新のbundlerがインストールされる。
今回は元々使っていたbundlerのバージョンと合わせたいので、
# Ruby2.4.3が入っているディレクトリに移動 $ bundler -v Bundler version 1.16.1
# Ruby2.5.0のディレクトリに戻る $ sudo gem install bundler -v 1.16.1 Successfully installed bundler-1.16.1 Parsing documentation for bundler-1.16.1 Done installing documentation for bundler after 6 seconds 1 gem installed
無事インストールが成功した。
$ bundler -v rbenv: bundler: command not found The `bundler' command exists in these Ruby versions: 2.4.3
あれっ。。
先ほどインストールに成功したのにまだbundleコマンドが使えない。
バージョンの指定をしたのがいけなかったのかな?と思ったものの
$ sudo gem install bundler ERROR: Error installing bundler: bundler requires Ruby version >= 2.3.0.
なんだかよく分からないエラーが出た。
そもそも今入れてるRubyのバージョン2.5.0なのに、bundler requires Ruby version >= 2.3.0.
と言われている...
ruby-buildのバージョンアップをしなきゃいけないのかなとか、こちらの記事にあるようにGemfile.lockのbundlerのバージョンと一致していないといけないのかなとか色々試したのですが、どれも解決できなかった。
解決:rbenv exec をつける
こちらの記事に助けられました。。
AWS Amazon EC2にrbenvでRuby環境を構築する - Qiita
gem installの前に、現在のRubyのバージョンで実行することを明示的にしてあげないといけないみたい。
$ sudo rbenv exec gem install bundler -v 1.16.1 Fetching: bundler-1.16.1.gem (100%) Successfully installed bundler-1.16.1 Parsing documentation for bundler-1.16.1 Installing ri documentation for bundler-1.16.1 Done installing documentation for bundler after 3 seconds 1 gem installed
bundlerをインストールするためにgem installを実行しているので、それをそもそもrbenvで設定したRubyのバージョンで実行するということかな。
$ bundler -v Bundler version 1.16.1
無事インストールできました。
ローカルPC(MacOS)ではrbenv exec
をつけなくても実行できたのでOSによる違いなのかもしれない。