LoginSignup
8

More than 3 years have passed since last update.

【Ruby】systemのrubyやbundlerを参照していることで起こるエラーを解決する【mac】

Last updated at Posted at 2019-08-03

状況

macで初めてrubyの環境を構築する際に、macにデフォルトで入っているrubyやbundlerのPATHを参照していたことが原因で、プロジェクトで使用するrubyやbundlerのバージョンとの整合性が取れずエラーが多発したので、備忘録メモです。

エラーが出るまでの流れ

homebrewでruby-buildとrbenvをインストールしました。
homebrewでプロジェクトで使われている(Gemfileに記述されている)ruby2.3.0をインストールしました。

Installing ruby-2.3.0...
ruby-build: use readline from homebrew
Installed ruby-2.3.0 to /Users/user/.rbenv/versions/2.3.0

問題なくruby2.3.0のインストールが完了しました。

RubyのPATHを変更する

次に以下のコマンドを実行すると、エラーが出てしまいました。

$ bundle install --path vendor/bundle
Your Ruby version is 2.3.7, but your Gemfile specified 2.3.0

というエラーです。

$ ruby -vで確認をすると、なぜかruby2.3.7を参照しています。

$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

which rubyを行うと、


$ which ruby
/usr/bin/ruby

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

//パスを確認すると、そもそも/Users/ユーザー名/.rbenv/shims が PATH に含まれていません。


こちらを参考にしました→
rbenvでバージョンがうまく切り替わらなかった時にやったこと
【2018年版】macにrbenvを入れてrubyを管理できるようにしちゃう
rbenv+ruby-buildを使ってMacにRubyの環境を構築する

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ rbenv rehash
$ which ruby
/Users/user/.rbenv/shims/ruby
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin18]

rubyのPATHを設定し、2.3.0を参照することに成功しました。

bundlerのPATHを変更する

そのあと、$ bundle install --path vendor/bundleを行うとまたもYour Ruby version is 2.3.7, but your Gemfile specified 2.3.0のエラーが出ました。


//bundleのPATHを確認してみる
$ which bundle
/usr/local/bin/bundle

$ echo $PATH
/Users/user/.rbenv/shims:/Users/user/.rbenv/bin:/Users/user/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/.rbenv/shims:/Users/user/.rbenv/bin

bundlerがshimsの中にありません。
さらに、$ bundle envを実行してみると、


$ bundle env
## Environment

Bundler       2.0.2
  Platforms   ruby, universal-darwin-18
Ruby          2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

なぜかbundlerがruby2.3.7を参照しています。
ここに原因がありそうです。

対処方法

teratailに質問をして回答をいただきましたので、転記(【macOS】Your Ruby version is 2.3.7, but your Gemfile specified 2.3.0)になりますが、記載します(asm様いつもありがとうございます)

ruby 2.3だとbundlerはデフォルトでインストールされるgemではないので、自分でインストールが必要です。
gemコマンドが/Users/user/.rbenv/shims/rubyになってることを確認した後に
$ gem install bundler
を実行してください

bundlerがshimsの中インストールされておらず、デフォルトのbundlerがそのままsystemのrubyを参照していることが原因でした。(この原因分析が間違っていたらご教示下さい。)

$ which gem
/Users/user/.rbenv/shims/gem      //OK

$ gem install bundler
Successfully installed bundler-2.0.2
Parsing documentation for bundler-2.0.2
Done installing documentation for bundler after 5 seconds
1 gem installed

$ which bundler
/Users/user/.rbenv/shims/bundler //OK


参照しているbundleが.rbenv/shims/bundleになることに成功しました。

その後、$ rbenv rehashを実行します。

bundlerをインストールしたら毎回このコマンドを実行しなければいけません。
なぜなら、このコマンドにより、gem,rake,rails,rubyなどのコマンドをrbenvに渡してくれるshimsという軽量実行ファイルをインストールしているからです。(ごめんなさいGithubを直訳しているだけで完全に理解していません。)

これをしないままだと、また同じエラーが出てしまいました。

その後、$bundle install --path vendor/bundle をすることができました。
今回のエラーは以上です。

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
8