箱のプログラミング日記。

えんじにあ奮闘記

Amazon Linuxにbundlerがインストールできない

f:id:y_hakoiri:20191102121618j:plain

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による違いなのかもしれない。

参考

AWS Amazon EC2にrbenvでRuby環境を構築する - Qiita

[rails,aws]bundlerのバージョンが変更できないエラーの解決方法 - Qiita