##状況
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
をすることができました。
今回のエラーは以上です。